無廢話設計模式(3)建造者模式
阿新 • • 發佈:2020-07-31
0-前言
建造者模式也是建立型模式的一種,先簡單介紹下它的幾部分(不畫UML圖,直接看程式碼哈):
A、產品(Product):描述一個由一系列部件組成較為複雜的物件。
B、抽象建造者(builder):建造者的公共介面,一般用來定義建造細節的方法,並不涉及具體的物件部件的建立。
C、具體建造者(ConcreteBuilder):描述具體建造者,並實現抽象建造者公共介面。
D、指揮者(Director):呼叫具體建造者來建立複雜物件的各個部分,並按照一定順序來建造複雜物件。
1-建造者模式實現
1-1、產品(Product)
//1、產品物件(product) class Phone {private String Mainboard; //主機板 private String Screen; //螢幕 private String Shell; //外殼 public String getMainboard() { return Mainboard; } public void setMainboard(String mainboard) { Mainboard = mainboard; } public String getScreen() {return Screen; } public void setScreen(String screen) { Screen = screen; } public String getShell() { return Shell; } public void setShell(String shell) { Shell = shell; } @Override public String toString() { return"Phone{" + "Mainboard='" + Mainboard + '\'' + ", Screen='" + Screen + '\'' + ", Shell='" + Shell + '\'' + '}'; } }
1-2、抽象建造者(builder)
//2、抽象建造者(Builder) abstract class Builder { abstract void bulidMainboard(); //建造主機板 abstract void bulidScreen(); //建造螢幕 abstract void bulidShell(); //建造外殼 //完工-返回手機產品 abstract Phone getPhone(); }
1-3、具體建造者(ConcreteBuilder)
//3、具體建造者 class IphoneBuilder extends Builder { private Phone phone; public IphoneBuilder() { phone = new Phone(); } @Override void bulidMainboard() { phone.setMainboard("安裝了蘋果手機主機板!"); } @Override void bulidScreen() { phone.setScreen("安裝了蘋果手機的螢幕!"); } @Override void bulidShell() { phone.setShell("安裝了蘋果手機的外殼!"); } @Override public Phone getPhone() { return phone; } }
1-4、指揮者(Director)
//4、指揮者(Director)
class Director
{
//指揮工人按順序建造手機
public Phone create(Builder builder)
{
builder.bulidMainboard();
builder.bulidScreen();
builder.bulidShell();
return builder.getPhone();
}
}
1-5、客戶端:
Director director =new Director(); Phone phone = director.create(new IphoneBuilder()); System.out.println(phone.toString());
2-簡單總結
優點:
1、產品的建造和表示分離,實現瞭解耦。
2、將複雜產品的建立步驟形成統一
3、增加新的具體建造者無需修改原有類庫的程式碼,易於拓展,符合“開閉原則“。
缺點:
1、產品必須有共同點,限制了使用範圍。
2、如內部變化複雜,會有很多的建造類,難以維護。
適用場景:
1、需要生成的產品物件有複雜的內部結構,這些產品物件具備共性;
2、隔離複雜物件的建立和使用,並使得相同的建立過程可以建立不同的產品。
3、需要生成的物件內部屬性本身相互依賴。
4、適合於一個具有較多的零件(屬性)的產品(物件)的建立過程。