摘要:本質建造者設計模式分離了對象子組件的構造過程和組裝過程,實現了構建與組裝的解耦,不同的構建器相同的組裝順序以及相同的構建器不同的組裝順序都可以創建出不同的對象,使得構建與組裝充分解耦,進而實現構建算法與組裝算法的解耦,從而實現更好的復用。
這是設計模式系列的第二篇——建造者設計模式,我希望推送的文章是一個系列的,盡量保持一樣的寫作風格,盡量把我理解的闡述清楚,關于建造者設計模式主要從以下幾個方面來學習,具體如下:
概述
本質
關鍵概念
具體實現
總結
概述建造者設計模式(Builder Pattern)屬于創建型設計模式,主要用于創建復雜的對象,可將復雜對象的構建過程抽象出來,通過不同實現的構建者和裝配者最終組裝出不同的對象,可以非常方便的增加不同實現的構建者、組裝者而不用修改以前的代碼。
本質建造者設計模式(Builder Pattern)分離了對象子組件的構造過程和組裝過程,實現了構建與組裝的解耦,不同的構建器相同的組裝順序以及相同的構建器不同的組裝順序都可以創建出不同的對象,使得構建與組裝充分解耦,進而實現構建算法與組裝算法的解耦,從而實現更好的復用。
關鍵概念構建者(Builder):構建不同的子組件且返回子組件或者提供獲取復雜對象的方法,將構建過程抽象成接口或抽象類,方便擴展具體的不同的構建者。
組裝者(Dirctor):通過某個具體的構建者構建相關的子組件,同時對外提供組成復雜產品對象的方法。
當需要生成復雜對象時,直接通過某個具體的組裝者獲得想要的具體對象即可,至于組裝過程與構建過程使用者不需要關心,分別由具體的組裝者與具體的構建者內部完成。當然復雜對象可以理解為具有很多屬性的對象。
具體實現下面以手機的組裝過程來說明建造者設計模式的具體實現,產品類如下:
/** * 產品 * @author jzman */ public class Phone { private Screen screen; private Camera camera; private Cpu cpu; //省略getter、setter、toString 方法 //... } //子組件 class Screen{ private String name; //... } //子組件 class Camera{ private String name; //... } //子組件 class Cpu{ private String name; //... }
抽象的構建者:
/** * 構建者 * @author jzman */ public interface PhoneBuilder { Screen builderScreen(); Camera builderCamera(); Cpu builderCpu(); }
具體的構建者:
/** * 具體的構建者 * @author jzman */ public class MiPhoneBuilder implements PhoneBuilder{ @Override public Screen builderScreen() { System.out.println("構建屏幕..."); return new Screen("Mi-screen"); } @Override public Camera builderCamera() { System.out.println("構建相機..."); return new Camera("Mi-camera"); } @Override public Cpu builderCpu() { System.out.println("構建屏幕..."); return new Cpu("Mi-cpu"); } }
抽象的組裝者:
/** * 抽象的組裝者 * @author jzman */ public interface PhoneDirector { Phone directPhone(); }
具體的構建者:
/** * 具體的組裝者 * @author jzman */ public class MiPhoneDirector implements PhoneDirector{ private PhoneBuilder builder; public MiPhoneDirector(PhoneBuilder builder) { this.builder = builder; } @Override public Phone directPhone() { Phone phone = new Phone(); phone.setScreen(builder.builderScreen()); phone.setCamera(builder.builderCamera()); phone.setCpu(builder.builderCpu()); return phone; } }
使用者直接通過某個具體的組裝者獲取最終的產品,具體如下:
public class Client { public static void main(String[] args) { PhoneBuilder builder = new MiPhoneBuilder(); MiPhoneDirector director = new MiPhoneDirector(builder); Phone phone = director.directPhone(); System.out.println(phone); } }
執行結果如下:
構建屏幕... 構建相機... 構建屏幕... Phone [screen=Screen [name=Mi-screen], camera=Camera [name=Mi-camera], cpu=Cpu [name=Mi-cpu]]
最終,使用者通過具體的組裝者 MiPhoneDirector 組裝出一個具有明顯組裝特征的手機,即一個屏幕是 Mi-screen 、相機是 Mi-camera、CPU 是 Mi-cpu 的手機。
總結建造者設計模式(Builder Pattern) 一般用于具有共同特性的復雜對象,其對象本身與構建、組裝過程分離,可做到復雜對象屬性的可配置,當然,如果復雜對象內部過于復雜,勢必會需要創建更多的構建者類,使得構建過程繁瑣,我覺得開發中使用建造者設計模式主要用來做一些封裝,使得代碼寫起來更靈活,如 Picasso、Glide 的 API 就有建造者設計模式的使用,使得復雜對象的一些屬性可以做到可配置,非常方便。
可以選擇關注微信公眾號:jzman-blog 獲取最新更新,一起交流學習!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74730.html
摘要:參考文章設計模式之建造者模式一什么是建造者模式建造者模式是將一個復雜的對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 參考文章:java設計模式之建造者模式 一、什么是建造者模式建造者模式:是將一個復雜的對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。工廠類模式提供的是創建單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來創建復合對象,所謂...
摘要:建造者模式實現建造者模式實現創建抽象建造者類創建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執行順序,產生不同的事件結果時,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...
1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個復雜對象的構建與它的表示分離, 使得同樣的構建過程可以創建不同的表示。 說人話:將構...
摘要:建造者實現抽象類的所有未實現的方法,具體來說一般是兩項任務組建產品返回組建好的產品。 0x01.定義與類型 定義:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 用戶只需指定需要建造的類型就可以得到他們,建造過程及細節不需要知道 類型:創建型 實現建造模式的兩種方式 1.抽象建造者 UML: showImg(https://segmentfault.co...
閱讀 1391·2023-04-26 03:04
閱讀 2325·2019-08-30 15:44
閱讀 3727·2019-08-30 14:15
閱讀 3507·2019-08-27 10:56
閱讀 2703·2019-08-26 13:53
閱讀 2616·2019-08-26 13:26
閱讀 3075·2019-08-26 12:11
閱讀 3609·2019-08-23 18:21