結(jié)構(gòu)型模式
結(jié)構(gòu)型模式主要涉及如何組合各種對象以便獲得更好、更靈活的結(jié)構(gòu)。雖然面向?qū)ο蟮睦^承機(jī)制提供了最基本的子類擴(kuò)展父類的功能,但結(jié)構(gòu)型模式不僅僅簡單地使用繼承,而更多地通過組合與運(yùn)行期的動態(tài)組合來實(shí)現(xiàn)更靈活的功能。
包括:
1、適配器
2、橋接
3、組合
4、裝飾器Decorator
5、外觀
6、享元
7、代理
裝飾者模式
指在不改變現(xiàn)有對象結(jié)構(gòu)的情況下,動態(tài)地給該對象增加一些職責(zé)(即增加其額外功能)的模式
結(jié)構(gòu)
1、抽象構(gòu)件:規(guī)范準(zhǔn)備接收附加責(zé)任的對象
2、具體構(gòu)件
3、抽象裝飾角色:繼承或?qū)崿F(xiàn)抽象構(gòu)建,并包含具體構(gòu)建的實(shí)例,通過其子類擴(kuò)展具體構(gòu)建的功能
4、具體裝飾角色
好處
1、裝飾者模式可以帶來比繼承者更加靈活性的擴(kuò)展功能,使用更加方便,可以通過組合不同裝飾者對象來獲取具有不同行為狀態(tài)的多樣化的結(jié)果。裝飾者模式比繼承更具良好的擴(kuò)展性,完美的遵循開閉原則,繼承是靜態(tài)的附加責(zé)任,裝飾者則是動態(tài)的附加責(zé)任
2、裝飾類和被裝飾類可以獨(dú)立發(fā)展,不會相互耦合,裝飾模式是繼承的一個(gè)替代模式,裝飾模式可以動態(tài)擴(kuò)展成一個(gè)實(shí)現(xiàn)類的功能
橋接模式
將抽象與實(shí)現(xiàn)分離,使它們可以獨(dú)立變化。是用組合關(guān)系代替繼承關(guān)系來實(shí)現(xiàn),從而降低了抽線和實(shí)現(xiàn)這兩個(gè)可變維度的耦合度。
結(jié)構(gòu)
1、抽象化角色
2、擴(kuò)展抽象化角色
3、實(shí)現(xiàn)化角色
4、具體實(shí)現(xiàn)化角色
好處
1、橋接模式提高了系統(tǒng)的可擴(kuò)充性,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,都不需要修改原有系統(tǒng)
2、實(shí)現(xiàn)細(xì)節(jié)對客戶透明
外觀模式
又名門面模式,是一種通過為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對外有一個(gè)統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體的細(xì)節(jié),這樣會大大降低應(yīng)用程序的復(fù)雜度,提高了程序的可維護(hù)性
結(jié)構(gòu)
1、外觀角色
2、子系統(tǒng)角色
好處
1、降低了子系統(tǒng)與客戶端之間的耦合度,使子系統(tǒng)的變化不會影響調(diào)用它的客戶類
2、對客戶屏蔽了子系統(tǒng)組件,減少了客戶處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易
缺點(diǎn):不符合開閉原則,修改很麻煩
組合模式
又名部分整體模式,是用于把一組相似的對象當(dāng)作一個(gè)單一的對象。組合模式依據(jù)樹形結(jié)構(gòu)來組合對象,用來表示部分以及整體層次。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,創(chuàng)建了對象組的樹形結(jié)構(gòu)。
結(jié)構(gòu)
1、抽象根節(jié)點(diǎn)
2、樹枝節(jié)點(diǎn)
3、葉子節(jié)點(diǎn)
分類
根據(jù)抽象構(gòu)建類的定義形式:
1、透明組合模式
抽象根節(jié)點(diǎn)角色中聲明了所有用于管理成員對象的方法,這樣做的好處是確保所有的構(gòu)建類都有相同的接口。
缺點(diǎn)是不夠安全,因?yàn)槿~子對象和容器對象在本質(zhì)上是有區(qū)別的,葉子對象不可能有下一個(gè)層次的對象,即不可能包含成員對象,因此提供方法是沒有意義的,在編譯階段不會報(bào)錯(cuò),在運(yùn)行階段如果調(diào)用這些方法可能會出錯(cuò)(如果沒有提供相應(yīng)的錯(cuò)誤處理代碼)
2、安全組合模式
抽象構(gòu)件角色中沒有聲明任何用于管理成員對象的辦法,而是在樹枝節(jié)點(diǎn)中聲明并實(shí)現(xiàn)這些方法。
缺點(diǎn)是不夠透明,因?yàn)槿~子構(gòu)建和容器構(gòu)件具有不同的方法,且容器構(gòu)件中那些用一把管理成員對象的方法沒有在抽象構(gòu)件類中定義,因此客戶端不能完全針對抽象編程,必須有區(qū)別地對待葉子構(gòu)件和容器構(gòu)件。
優(yōu)點(diǎn)
1、組合模式可以清楚地定義分層次的復(fù)雜對象,表示對象的全部或部分層次,它讓客戶端忽略了層次的差異,方便對整個(gè)層次結(jié)構(gòu)進(jìn)行控制。
2、客戶端可以一致地使用一個(gè)組合結(jié)構(gòu)或其中單個(gè)對象,不必關(guān)心處理的是單個(gè)對象還是整個(gè)組合結(jié)構(gòu),簡化了客戶端代碼。
3、在組合模式中增加新的樹枝節(jié)點(diǎn)和葉子節(jié)點(diǎn)都很方便,無須對現(xiàn)有類庫進(jìn)行任何修改,符合“開閉原則”。
4、組合模式為樹形結(jié)構(gòu)的面向?qū)ο髮?shí)現(xiàn)提供了一種靈活的解決方案,通過葉子節(jié)點(diǎn)和樹枝節(jié)點(diǎn)的遞歸組合,可以形成復(fù)雜的樹形結(jié)構(gòu),但對樹形結(jié)構(gòu)的控制卻非常簡單。
享元模式
運(yùn)用共享技術(shù)來有效地支持大量細(xì)粒度對象的復(fù)用。通過共享已經(jīng)存在的對象來大幅度減少需要?jiǎng)?chuàng)建的對象數(shù)量、避免大量相似對象的開銷,從而提高系統(tǒng)資源的利用率。
結(jié)構(gòu)
存在兩種狀態(tài):
1、內(nèi)部狀態(tài),不會隨著環(huán)境的改變而改變的可共享部分
2、外部狀態(tài),隨環(huán)境改變而改變的不可以共享的部分。
角色:
1、抽象享元角色
2、具體享元角色
3、非享元角色
4、享元工廠角色
優(yōu)點(diǎn)
1、極大減少內(nèi)存中相似或相同對象數(shù)量,節(jié)約系統(tǒng)資源,提高系統(tǒng)性能
2、外部狀態(tài)相對獨(dú)立,且不影響內(nèi)部狀態(tài)文章來源:http://www.zghlxwxcb.cn/news/detail-775752.html
缺點(diǎn):
為了使對象可以共享,需要將享元對象的部分狀態(tài)外部化,分離內(nèi)部狀態(tài)和外部狀態(tài),使程序邏輯復(fù)雜文章來源地址http://www.zghlxwxcb.cn/news/detail-775752.html
到了這里,關(guān)于Java學(xué)習(xí)——設(shè)計(jì)模式——結(jié)構(gòu)型模式2的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!