面相對象的藝術|設計模式2(結構型)


“ 設計模式 ”是 “面向對象設計模式” 的簡稱,是軟件開發人員在軟件開發過程中面臨的一般問題的解決方案。


主要用來應對 類 的變化。


“ 設計模式 ”又分為:創建型模式、結構型模式、行為型模式。


本文介紹的“結構型”設計模式是從程序的結構上解決模塊之間的耦合問題。





首先是結構型模式的幾個細分:

1.橋接模式:對象的接口與實現

2.適配器模式:可以將類的一個接口匹配另一個接口

3.合成模式:對象的組合

4.門面模式:一個類表示一個子系統

5.裝飾模式:動態給對象添加職責

6.代理模式:一個簡單的對象代替一個復雜的稍后會被調用的復雜對象

1.橋接模式—— 適應對象接口與實現的多維變化

對象的變化,分為:接口變化、實現變化、屬性變化。

當出現單緯度的變化時(接口變化/實現變化),我們通常有兩個解決放啊:水平關聯/繼承。



但是,當多個緯度時變化時,單一的使用繼承會導致子類數量的快速增長,單一的使用水平關聯會導致擴展性變差。

所以在適應多維度變化時,我們使用橋接模式,將接口與實現分離。


橋接模式


2.適配器模式——將一個類的接口轉換成客戶希望的另外一個接口

當原接口不可修改,A和B兩個類的接口不一致,而需要將B類當A類來使用時,使用適配器模式。




適配器模式


3.合成模式—— 將對象組合成樹形結構以表示"部分-整體"的層次結構


樹形結構


一個樹結構由兩種節點組成:樹枝節點和樹葉節點。樹枝節點可以有子節點,而一個樹葉節點不可以有子節點。除了根節點外,其它節點有且只有一個父節點。

當我們需要抽象的問題,同樣具又這樣的性質的時候,就需要使用合成模式了。

例子來自:http://blog.csdn.net/koudaidai/article/details/7340192



合成模式


在“故事”類中,組合一個 “根節點類”,就可以實現,故事既可以只有一重也有多重。


4.門面模式——用戶并不關注我們如果寫的代碼


在我們的生活中醫院就是這樣的。一般的醫院都會分為掛號、門診、化驗、收費、取藥等。看病的病人要想治好自己的病(相當于一個客戶端想要實現自己的功能)就要和醫院的各個部門打交道。首先,病人需要掛號,然后門診,如果醫生要求化驗的話,病人就要去化驗,然后再回到門診室,最后拿藥,經過一系列復雜的過程后才能完成看病的過程。


例子來自:http://blog.csdn.net/xingjiarong/article/details/50066133


解決這一辦法的設計是,提供一個接待員(門面模式)


門面模式

用戶并不關心我們如何實現的功能,他們更希望直接使用

5.裝飾模式—— 在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能


裝飾模式

裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

如果單一的使用繼承,將導致子類數量激增,并且只能改變單個子對象的功能。

如果單一的使用水平關聯,新的類與父類不再是父子關系。

6.代理模式——一個是你要訪問的對象(目標類),一個是代理對象

代理模式提供了對目標對象另外的訪問方式,即通過代理對象訪問目標對象。這樣做的好處是:可以在目標對象實現的基礎上,增強額外的功能操作,即擴展目標對象的功能。


代理模式
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,166評論 6 13
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,978評論 1 15
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • 她叫王伍 聽起來特別像男孩子的名字 據說當年她的“父王母王”因為不希望她像他們一樣丟三落四 所以給她取名叫小伍 而...
    王五雜貨鋪閱讀 295評論 1 0
  • 卷一 夏若和爺爺一起住在江南一個小鎮上。爺爺以前是鎮上一所初中的語文老師,退休了之后就在家里寫些字畫貼補家用。 夏...
    夏暖冬涼的故事閱讀 501評論 0 6