6.建立型模式(建造者模式)
阿新 • • 發佈:2021-10-13
1.概述
-
定義:將一個複雜物件的構造與其表示分離,使同樣構建過程可以建立不同的表示。
- 將複雜物件分解為多個簡單物件,一步一步構建(產品組成部分不變,但每一部分是可變的)
-
結構:
- 產品角色Product:包含多個組成部件的複雜物件,由具體建造者來建立其各個零部件
- 抽象建造者Builder:包含建立產品各個子部件的抽象方法的介面,通常包含一個返回複雜產品的方法get()
- 具體建造者Concrete Builder:實現Builder介面,完成複雜產品各個部件的具體建立方法
- 指揮者Director:呼叫建造者物件中的部件構造和裝配方法完成複雜物件的建立(不涉及具體產品資訊)
-
建造者模式區別於工廠模式
- 建造者模式注重方法呼叫順序,工廠注重於建立物件
- 建造者模式建立複雜部件組成的複雜物件,工廠創建出的物件相同
- 建造者模式不僅要建立物件還要明確其具體部件組成,工廠只需建立物件
具體實現:實現家庭裝修,包含牆體,電視與沙發。運用建造者模式完成裝修實現
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();
}
}