1. 程式人生 > 其它 >6.建立型模式(建造者模式)

6.建立型模式(建造者模式)

1.概述

  • 定義:將一個複雜物件的構造與其表示分離,使同樣構建過程可以建立不同的表示。

    • 將複雜物件分解為多個簡單物件,一步一步構建(產品組成部分不變,但每一部分是可變的)
  • 結構:

    1. 產品角色Product:包含多個組成部件的複雜物件,由具體建造者來建立其各個零部件
    2. 抽象建造者Builder:包含建立產品各個子部件的抽象方法的介面,通常包含一個返回複雜產品的方法get()
    3. 具體建造者Concrete Builder:實現Builder介面,完成複雜產品各個部件的具體建立方法
    4. 指揮者Director:呼叫建造者物件中的部件構造和裝配方法完成複雜物件的建立(不涉及具體產品資訊)
  • 建造者模式區別於工廠模式

    1. 建造者模式注重方法呼叫順序,工廠注重於建立物件
    2. 建造者模式建立複雜部件組成的複雜物件,工廠創建出的物件相同
    3. 建造者模式不僅要建立物件還要明確其具體部件組成,工廠只需建立物件

具體實現:實現家庭裝修,包含牆體,電視與沙發。運用建造者模式完成裝修實現


1.產品角色Product

public class WallProduct {
	private String wall;
	private String TV;
	private String sofa;

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

	public void setTV(String TV) {
		this.TV = TV;
	}

	public void setSofa(String sofa) {
		this.sofa = sofa;
	}

	//相當於show方法,展現牆體裝修效果
	@Override
	public String toString() {
		return "WallProduct{" +
				"wall='" + wall + '\'' +
				", TV='" + TV + '\'' +
				", sofa='" + sofa + '\'' +
				'}';
	}
}

2.抽象建造者Builder

public abstract class AbstractWallBuilder {
	protected WallProduct product = new WallProduct();

	public abstract void buildWall();

	public abstract void buildTV();

	public abstract void buildSofa();

	public WallProduct getProduct(){
		return product;
	}
}

3.具體建造者1-ConcreteWallBuilder

public class ConcreteWallBuilder1 extends AbstractWallBuilder{
	@Override
	public void buildWall() {
		product.setWall("wall1");
	}

	@Override
	public void buildTV() {
		product.setTV("TV1");
	}

	@Override
	public void buildSofa() {
		product.setSofa("Sofa1");
	}
}

4.指揮者Director

public class WallDirector {
	private AbstractWallBuilder builder;

	public WallDirector(AbstractWallBuilder builder) {
		this.builder = builder;
	}

	//呼叫具體工人進行裝修
	public WallProduct decorate() {
		builder.buildSofa();
		builder.buildTV();
		builder.buildWall();
		return builder.getProduct();
	}

}