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、適合于一個具有較多的零件(屬性)的產品(物件)的創建程序,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/3118.html
標籤:設計模式
上一篇:無廢話設計模式(2)單例模式
下一篇:無廢話設計模式(4)原型模式
