結(jié)構(gòu)型模式

結(jié)構(gòu)型模式 就像搭積木,可以通過 簡單積木的組合形成復(fù)雜的、功能更為強大的結(jié)構(gòu)。

適配器模式(Adapter)

  1. 實現(xiàn):在適配器模式中可以定義一個包裝類,包裝不兼容接口的對象,這個包裝類指的就是適配器(Adapter),它所包裝的對象就是適配者(Adaptee),即被適配的類。
    2.通過使用配置文件,可以很方便地更換適配器,也可以在不修改原有代碼的基礎(chǔ)上增加新的適配器類,完全符合“開閉原則”。
    3.適用于
  • 以前開發(fā)的系統(tǒng)存在滿足新系統(tǒng)功能需求的類,但其接口同新系統(tǒng)的接口不一致。
  • 使用第三方提供的組件,但組件接口定義和自己要求的接口定義不同。
  • 想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類一起工作。
  • 統(tǒng)一接口對外實現(xiàn),1.不同接口包裝一層,2.內(nèi)部也可以是多態(tài)的多個實現(xiàn)。

4.例子:JDBC給出一個客戶端通用的抽象接口,每一個具體數(shù)據(jù)庫引擎(如SQL Server、Oracle、MySQL等)的JDBC驅(qū)動軟件都是一個介于JDBC接口和數(shù)據(jù)庫引擎接口之間的適配器軟件。

裝飾器模式

1.裝飾器持有被包裝對象的引用,構(gòu)造函數(shù)傳入, 并實現(xiàn)抽象的被包裝行為。

  1. 可以通過一種動態(tài)的方式來擴展一個對象的功能,通過配置文件可以在運行時選擇不同的裝飾器,從而實現(xiàn)不同的行為。
    通過使用不同的具體裝飾類以及這些裝飾類的排列組合,可以創(chuàng)造出很多不同行為的組合??梢允褂枚鄠€具體裝飾類來裝飾同一對象,得到功能更為強大的對象。而且具體構(gòu)件類與具體裝飾類可 以獨立變化,用戶可以根據(jù)需要增加新的具體構(gòu)件類和具體裝飾類
    3.適用于
  • 需要動態(tài)地給一個對象增加功能,這些功能也可以動態(tài)地被撤銷。
  • 當(dāng)不能采用繼承的方式對系統(tǒng)進行擴充或者采用繼承不利于系統(tǒng)擴展和維護時。不能采用繼承的情況主要有兩類:第一類是系統(tǒng)中存在大量獨立的擴展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長;第二類是因為類定義不能繼承(如final類).
兩者區(qū)別 都是包裝模式(Wrapper),對象型的話,實現(xiàn)形式相同:都是has a 的持有關(guān)系。但是目的不同,adapter 是為了從一個接口轉(zhuǎn)到另一個接口,不同接口;裝飾器是為了在原有的基礎(chǔ)上新增功能。

4.典型:IO流
BufferedReader in = new BufferedReader(new FileReader("filename.txt"));
String s = in.readLine();

橋接模式

1.存在多個獨立變化的維度,好多分類。皮包按用途、顏色、大小多種分類。一個分支包含其他的維度的抽象行為引用。

Bag{Clolor color;Size size;  Way way;      public   getBag(){this.color.getcolor()+this.size.getSize()+this.way.getWay();}}

2.橋接(Bridge)模式可與適配器模式聯(lián)合使用
3.與工廠方法模式的區(qū)別?

外觀模式/門面模式

1.外部與一個子系統(tǒng)的通信必須通過一個統(tǒng)一的外觀對象進行,為子系統(tǒng)中的一組接口提供一個一致的界面.
2.在很多情況下為了節(jié)約系統(tǒng)資源,一般將外觀類設(shè)計為單例類。當(dāng)然這并不意味著在整個系統(tǒng)里只能有一個外觀類,在一個系統(tǒng)中可以設(shè)計多個外觀類,每個外觀類都負(fù)責(zé)和一些特定的子系統(tǒng)交互,向用戶提供相應(yīng)的業(yè)務(wù)功能。

享元模式

  • 緩存可復(fù)用的結(jié)構(gòu),例如hashmap,可以結(jié)合工廠模式

http://c.biancheng.net/view/1366.html
https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/decorator.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容