定義
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以構建不同的表示。
場景
比如最常見的AlertDialog
,比如Camera
開發過程中,可能需要設定一個初始化的相機配置,設定攝像頭方向,閃光燈開關閉,成像質量等等,這種場景下就可以使用建造者模式。
優缺點
-
優點 1).易於解耦,將產品本身與產品建立過程進行解耦,可以使用相同的建立過程來得道不同的產品,也就是說細節依賴抽象。
2).易於精確控制物件的建立。
3).易於擴充,增加新的具體建造者無需修改原有類庫的程式碼,易於擴充,符合"開閉原則"。
-
缺點 1).建造者模式所建立的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式,因此使用範圍受到一定的限制。
2).如果產品的內部變化複雜,可能導致需要定義很多具體建造者類來實現這種變化,導致系統變得很大。
-
裝飾者模式
動態的給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活,裝飾者模式可以在不改變原有類結構的情況下增強類的功能,比如
java
中的BufferedInputStream
包裝FileInputStream
,舉個開發中的例子,比如我們現有的網路框架上需要增加新的功能,那麼再包裝一層即可,裝飾者模式解決了繼承存在的一些問題,比如多層繼承程式碼的臃腫,使程式碼更清晰。
參考文章