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

建造者模式

1. 什么是建造者模式?

建造者模式属于创造型模式,它是将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。

举例:

普通房子和高楼,两者都很难建造,但也有相似点:打地基、砌墙、盖屋顶。

普通房子的地基5m,墙10cm;高楼的地基100m,墙20cm。

2. 建造者模式结构

  • Product(产品角色):一个具体的产品对象
  • Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类
  • ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件
  • Director(指挥者):构建一个使用Builder接口的对象。主要是创建一个复杂的对象。主要作用是:一是隔离了客户与对象的生产过程;二是负责控制产品对象的生产过程。

3. Code

/**
 * @author dingding
 *	产品对象
 */
public class House {
	
	private String basic;
	private String wall;
	private String roofed;

	public String getBasic() {
		return basic;
	}

	public void setBasic(String basic) {
		this.basic = basic;
	}

	public String getWall() {
		return wall;
	}

	public void setWall(String wall) {
		this.wall = wall;
	}

	public String getRoofed() {
		return roofed;
	}

	public void setRoofed(String roofed) {
		this.roofed = roofed;
	}

}

/**
 * @author dingding 
 * 抽象建造者
 */
public abstract class HouseBuilder {

	protected House house = new House();

	public abstract void buildBasic();

	public abstract void buildWalls();

	public abstract void roofed();

	public House buildHouse() {
		return house;
	}
}
/**
 * @author dingding
 *	具体构造者1
 */
public class CommonHouse extends HouseBuilder {

	@Override
	public void buildBasic() {
		System.out.println(" 普通房子打地基5米 ");
	}

	@Override
	public void buildWalls() {
		System.out.println(" 普通房子砌墙10cm ");
	}

	@Override
	public void roofed() {
		System.out.println(" 普通房子屋顶 ");
	}

}

/**
 * @author dingding 具体构造者2
 */
public class HignHouse extends HouseBuilder {

	@Override
	public void buildBasic() {
		System.out.println(" 高楼的打地基100米 ");
	}

	@Override
	public void buildWalls() {
		System.out.println(" 高楼的砌墙20cm ");
	}

	@Override
	public void roofed() {
		System.out.println(" 高楼的透明屋顶 ");
	}

}

/**
 * @author dingding 
 * 指挥者
 */
public class HouseDirector {

	HouseBuilder houseBuilder = null;

	public HouseDirector(HouseBuilder houseBuilder) {
		this.houseBuilder = houseBuilder;
	}

	public void setHouseBuilder(HouseBuilder houseBuilder) {
		this.houseBuilder = houseBuilder;
	}

	public House constructHouse() {
		houseBuilder.buildBasic();
		houseBuilder.buildWalls();
		houseBuilder.buildHouse();
		return houseBuilder.buildHouse();
	}

}
/**
 * @author dingding
 *	客户端
 */
public class Client {
	
	public static void main(String[] args) {
		CommonHouse commonHouse = new CommonHouse();
		
		HouseDirector houseDirector = new HouseDirector(commonHouse);
		
		House house = houseDirector.constructHouse();
		
		System.out.println("----------------------");
		
		HignHouse hignHouse = new HignHouse();
		houseDirector.setHouseBuilder(hignHouse);
		house = houseDirector.constructHouse();
		
	}

}

原文地址:https://www.cnblogs.com/lfdingye/p/11625896.html