设计模式java——建造者模式

本文通过一个具体的房屋建造案例,详细介绍了建造者模式的设计思想及其实现方式。通过将房屋的构造过程分解为多个步骤,并使用不同的建造者实现这些步骤,最终能够创建不同类型的房屋。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式Demo:

/**
 * 2018年3月28日下午10:09:43
 */
package com.Designpattern;

/**
 * @author xinwenfeng
 *
 */
public class TestBuilder {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Director director = new Director();
		HouseBuilder hb1 = new BandaBuilder();
		director.Construct(hb1);//告诉指挥者造一个茅草屋
		House banda = hb1.buildHouse();
		banda.showHouse();
		System.out.println("=========================");
		HouseBuilder hb2 = new VillaBuilder();
		director.Construct(hb2);//告诉指挥者造一个别墅
		House villa = hb2.buildHouse();
		villa.showHouse();
	}

}
//产品类,房屋
class House{
	private String name;
	private String wall;
	private String door;
	private String window;
	private String roof;
	public House(String name) {
		this.name = name;
	}
	public String getWall() {
		return wall;
	}
	public void setWall(String wall) {
		this.wall = wall;
	}
	public String getDoor() {
		return door;
	}
	public void setDoor(String door) {
		this.door = door;
	}
	public String getWindow() {
		return window;
	}
	public void setWindow(String window) {
		this.window = window;
	}
	public String getRoof() {
		return roof;
	}
	public void setRoof(String roof) {
		this.roof = roof;
	}
	public void showHouse() {
		System.out.println("这是一个带"+window+"的"+wall+"的"+name+",门是"+door+",屋顶是"+roof);
	}
}
//抽象建造者类
abstract class HouseBuilder{
	public abstract void buildeWall();
	public abstract void buildeRoof();
	public abstract void buildeDoor();
	public abstract void buildeWindow();
	public abstract House buildHouse();
	
}
//具体建造类,茅草屋
class BandaBuilder extends HouseBuilder{

	House house = new House("茅草屋");
	
	@Override
	public void buildeWall() {
		System.out.println("用土堆起了墙");
		house.setWall("土坯墙");
	}

	@Override
	public void buildeRoof() {
		System.out.println("用茅草盖了屋顶");
		house.setRoof("茅草屋顶");
	}

	@Override
	public void buildeDoor() {
		System.out.println("装上了木头门");
		house.setDoor("木门");
	}

	@Override
	public void buildeWindow() {
		System.out.println("装上了纸窗");
		house.setWindow("纸窗");
	}

	@Override
	public House buildHouse() {
		return house;
	}
	
}
//具体建造类,别墅
class VillaBuilder extends HouseBuilder{

	House house = new House("别墅");
	
	@Override
	public void buildeWall() {
		System.out.println("用大理石砌墙");
		house.setWall("大理石墙壁");
	}

	@Override
	public void buildeRoof() {
		System.out.println("用琉璃瓦盖屋顶");
		house.setRoof("琉璃瓦屋顶");
	}

	@Override
	public void buildeDoor() {
		System.out.println("安装上密码门");
		house.setDoor("密码门");
	}

	@Override
	public void buildeWindow() {
		System.out.println("装上了很大的落地窗");
		house.setWindow("大落地窗");
	}

	@Override
	public House buildHouse() {
		return house;
	}
	
}
//指挥者类,指挥建造房屋
class Director{
	public void Construct(HouseBuilder houseBuilder) {
		houseBuilder.buildeWall();//先建造墙壁
		houseBuilder.buildeRoof();//再盖屋顶
		houseBuilder.buildeDoor();//然后装上门
		houseBuilder.buildeWindow();//最后装上窗
	}
}

结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值