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

建造者模式(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();//最后装上窗
	}
}

结果:


猜你喜欢

转载自blog.csdn.net/flylikebutterfly/article/details/79735592