建造者模式屬於建立型模式,提供了一種建立物件的最佳方式。
定義:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
主要作用:在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。
product產品類:
通常是實現了模板方法模式(這裡可以後續看我的更新部落格,如果我更新了),也就是有模板方法和基本方法。
builder抽象建造者:
規範產品的組建,一般是由子類實現。
concretebuilder具體建造者:
實現抽象類定義的所有方法,並且返回乙個組建好的物件。
director導演類:
負責安排已有模組的順序,然後告訴builder開始建造。
舉個例子:
同樣的,我們以這個例子用**來實現一下更能清晰的了解。
我們的汽車類(car),也就是我們的產品
package builder;
public abstract class builder ';}}
我們的建造抽象類(builder)
package builder;
public abstract class builder
我們的建造實現類(concretebuilder)
package builder;
public class concretebuilder extends builder
@override
void buildwheel()
@override
void buildcardoor()
@override
void buildengine()
@override
void buildsteeringwheel()
@override
car getcar()
}
我們的導演類(director),用來指揮我們的建立過程,比如建立順序
package builder;
public class director
}
我們在測試類中測試一下
package builder;
public class test
}//測試結果
carprocess finished with exit code 0
可以看到,通過這樣的建造者模式,我們的複雜過程被我們封裝了起來。但是我們也發現了我們的導演可以指揮順序,但是裡面具體的引數,比如想建造什麼無法修改。其實也可以,我們對導演類進行擴充套件一下就行。
我們通過靜態內部類實現零件無序裝配構造,這種方式使用更加靈活,更符合定義。使用的時候可以根據使用者需求自定義更改內容。我們對其修改後,示例**如下:
我們對抽象建造的抽象方法新增了傳遞引數,修改了返回型別
package builder;
public abstract class builder
然後在實現類進行實現
package builder;
public class concretebuilder extends builder
@override
builder buildwheel(string msg)
@override
builder buildcardoor(string msg)
@override
builder buildengine(string msg)
@override
builder buildsteeringwheel(string msg)
@override
car getcar()
}
這時我們在導演類裡面,就可以自由的傳遞我們需要的引數來建造車輛,也可以指定順序。
package builder;
public class director
}
測試類的測試結果
car
process finished with exit code 0
建造者模式關注的是零件型別和裝配順序,我們可以總結一下它的優缺點和使用場景。
優點:
缺點:
差異性很大,則不適合使用建造者模式,因此其使用範圍受到一定的限制。
使用場景:
補充:
通過學習建造者模式,我們可以發現這與我們的抽象工廠模式很是相像,但是也是有不同的地方。(關於工廠模式可以看我的設計模式詳解之工廠模式)
建造者模式最主要的功能是基本方法的呼叫順序安排,因為組裝順序不同物件效能也不同,這才是建造者模式要表
達的核心意義。
(書籍)大話設計模式
詳解設計模式 建造者模式
建造者模式 builder 將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。主要解決在軟體系統中,有時候面臨著 乙個複雜物件 的建立工作,由於需求的變化,這個複雜物件的某些部分經常面臨著劇烈的變化,一些基本部件不會變。所以需要將變與不變分離。與抽象工廠的區別 在建造者模式裡,有...
設計模式之建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟 設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設 計模式 和...
設計模式之建造者模式
建造者模式也叫生成器模式,是一種物件建立型模式,用來隱藏復合物件的建立過程,它把復合物件的建立過程加以抽象,通過子類繼承或過載的方式,動態的建立具有復合屬性的物件。應用場景 物件的建立 builder 模式是為物件的建立而設計的模式 建立的是乙個復合物件 被建立的物件為乙個具有復合屬性的復合物件 關...