摘要:建造者模式一一般實(shí)現(xiàn)創(chuàng)建簡單對象創(chuàng)建復(fù)雜對象調(diào)用輸出缺點(diǎn)對象耦合度過高,簡單對象,復(fù)雜對象都與調(diào)用程序耦合當(dāng)簡單對象組合的方式發(fā)生變化時(shí),由其組合創(chuàng)建的復(fù)雜對象也跟著發(fā)生變化二建造者模式定義將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)
建造者模式(Builder)
一.一般實(shí)現(xiàn) 1.1 創(chuàng)建簡單對象public class SimpleEntity1 { public SimpleEntity1(){ System.out.println("create SimpleEntity1..."); } } public class SimpleEntity2 { public SimpleEntity2(){ System.out.println("create SimpleEntity2..."); } }1.2 創(chuàng)建復(fù)雜對象
public class ComplexEntity { public void createComplexEntity(SimpleEntity1 simpleEntity1, SimpleEntity2 simpleEntity2){ System.out.println("createComplexEntity ... with simpleEntity1 AND simpleEntity2 "); } }1.3 調(diào)用
public static void main(String[] args) { SimpleEntity1 s1 = new SimpleEntity1(); SimpleEntity2 s2 = new SimpleEntity2(); ComplexEntity complexEntity = new ComplexEntity(); complexEntity.createComplexEntity(s1, s2); }1.4 輸出
create SimpleEntityA1... create SimpleEntity2... createComplexEntity ... with simpleEntity1 AND simpleEntity21.5 缺點(diǎn)
對象耦合度過高,簡單對象,復(fù)雜對象都與調(diào)用程序耦合.
當(dāng)簡單對象組合的方式發(fā)生變化時(shí),由其組合創(chuàng)建的復(fù)雜對象也跟著發(fā)生變化.
二.建造者模式 2.1 定義將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示.
2.2 適用情況需要生成的對象具有復(fù)雜的內(nèi)部結(jié)構(gòu).
需要生成的對象內(nèi)部屬性本身互相依賴.
2.3 角色Builder:創(chuàng)建產(chǎn)品對象的公共接口.
ConcreteBuilder:實(shí)現(xiàn)Builder接口并產(chǎn)生具體的簡單對象,以供合成復(fù)雜對象.
Director:調(diào)用具體建造者,指導(dǎo)產(chǎn)生過程.
Product:最終產(chǎn)生的復(fù)雜產(chǎn)品對象.
三.代碼實(shí)現(xiàn) 3.1 復(fù)雜產(chǎn)品對象public class ComplexEntity { public ComplexEntity(){ System.out.println("create complexEntity ..."); } public void setSimpleEntityA(ISimpleEntityA a){ System.out.println("complexEntity set simpleEntityA ..."); } public void setSimpleEntityB(ISimpleEntityB b){ System.out.println("complexEntity set simpleEntityB ..."); } }3.2 簡單產(chǎn)品
public interface ISimpleEntityA { } public interface ISimpleEntityB { } public class SimpleEntityA1 implements ISimpleEntityA { public SimpleEntityA1(){ System.out.println("create SimpleEntityA1 ..."); } } public class SimpleEntityB1 implements ISimpleEntityB { public SimpleEntityB1(){ System.out.println("create SimpleEntityB1 ..."); } }3.3 抽象Builder接口
public interface IBuilder { void createSimpleEntityA(); void createSimpleEntityB(); ComplexEntity createComplexEntity(); }3.4 具體建造者對象
public class Builder1 implements IBuilder{ ComplexEntity complexEntity = new ComplexEntity(); @Override public void createSimpleEntityA() { complexEntity.setSimpleEntityA(new SimpleEntityA1()); } @Override public void createSimpleEntityB() { complexEntity.setSimpleEntityB(new SimpleEntityB1()); } @Override public ComplexEntity createComplexEntity() { return complexEntity; } }3.5 指導(dǎo)者對象
public class Director { public ComplexEntity create1(){ IBuilder builder = new Builder1(); builder.createSimpleEntityA(); builder.createSimpleEntityB(); return builder.createComplexEntity(); } }3.6 調(diào)用
public static void main(String[] args) { Director director = new Director(); director.create1(); }3.7 輸出
create complexEntity ... create SimpleEntityA1 ... complexEntity set simpleEntityA ... create SimpleEntityB1 ... complexEntity set simpleEntityB ...3.8 優(yōu)點(diǎn)
易于擴(kuò)展(新增具體建造者).
易于解耦(產(chǎn)品本身與產(chǎn)品創(chuàng)建過程).
精確控制復(fù)雜對象的創(chuàng)建.
3.9 缺點(diǎn)范圍(簡單對象需有共同點(diǎn)).
內(nèi)部變化不能過于復(fù)雜(會產(chǎn)生大量具體建造者).
四.源碼https://github.com/Seasons20/DisignPattern.git
END
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69401.html
摘要:而建造者模式則是要求按照指定的藍(lán)圖建造產(chǎn)品,它的主要目的是通過組裝零配件而產(chǎn)生一個新產(chǎn)品。最后通過一個套餐實(shí)例,介紹了建造者模式在實(shí)例中的基本使用手段。 歷史文章回顧: 設(shè)計(jì)模式專欄 深入理解單例模式 深入理解工廠模式 歷史優(yōu)質(zhì)文章推薦: 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問題看這篇就夠了 無論是在現(xiàn)實(shí)世界中還是在軟件...
摘要:即建造者模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。指導(dǎo)類負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,指導(dǎo)類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與指導(dǎo)類直接交互的是建造者類建造者模式優(yōu)點(diǎn)建造者模式的封裝性很好。 建造者模式 將一個復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。主要解決在軟件系統(tǒng)中,有時(shí)候面臨著一個復(fù)雜對象的創(chuàng)建工作,由于需求的變化,這個復(fù)雜對象的某些部分經(jīng)常面臨著劇烈的變化...
摘要:優(yōu)點(diǎn)建造者模式的封裝性很好,對象本身與構(gòu)建過程解耦。建造者模式很容易進(jìn)行擴(kuò)展。適用場景需要生成的對象具有復(fù)雜得內(nèi)部結(jié)構(gòu)且內(nèi)部屬性本身相互依賴建造者模式的代碼實(shí)現(xiàn)建造者模式主要有個部分產(chǎn)品類建造者類指揮者類客戶。建造者完成相應(yīng)的部分。 建造者模式 建造者模式(builder pattern)比較簡單,它屬于創(chuàng)建型模式的一種,將一個復(fù)雜的對象分解成多個簡單的對象來進(jìn)行構(gòu)建,將復(fù)雜的構(gòu)建層與...
摘要:參考文章設(shè)計(jì)模式之建造者模式一什么是建造者模式建造者模式是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 參考文章:java設(shè)計(jì)模式之建造者模式 一、什么是建造者模式建造者模式:是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。工廠類模式提供的是創(chuàng)建單個類的模式,而建造者模式則是將各種產(chǎn)品集中起來進(jìn)行管理,用來創(chuàng)建復(fù)合對象,所謂...
摘要:上期原型模式發(fā)布以后,收到了粉絲的感謝,一條創(chuàng)作的動力更足了。今天我們一塊看一下建造者模式,同樣是創(chuàng)建型設(shè)計(jì)模式。為我們提供了建造者模式的快速實(shí)現(xiàn),要應(yīng)用到實(shí)際編碼中。 ...
摘要:在建造者模式比較龐大時(shí),導(dǎo)演類可以有多個。該種場景只能是一個補(bǔ)償方法,因?yàn)橐粋€對象不容易獲得,而在設(shè)計(jì)階段竟然沒有發(fā)覺,而要通過創(chuàng)建者模式柔化創(chuàng)建過程,本身已經(jīng)違反設(shè)計(jì)的最初目標(biāo)。源碼地址參考文獻(xiàn)設(shè)計(jì)模式之禪 定義 Separate the construction of a complex object from its representation so that the same...
閱讀 3332·2021-09-30 09:54
閱讀 3839·2021-09-22 15:01
閱讀 3140·2021-08-27 16:19
閱讀 2599·2019-08-29 18:39
閱讀 2218·2019-08-29 14:09
閱讀 650·2019-08-26 10:23
閱讀 1365·2019-08-23 12:01
閱讀 1908·2019-08-22 13:57