誰是物件導向設計中的霸主?(中)

2022-10-10 19:57:11 字數 2278 閱讀 8992

在上篇博文中。我們一起了解了建立型模式組的戰況,以下我們來看看號稱「死亡之組」的結構型模式的戰況。所謂結構型模式,就是針對系統的結構進行設計,重點考慮產品的層次結構等問題。

以下我們一起來了解一下本組各個門派的資料:

介面卡模式:講乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本因為介面不相容而不能一起工作的那些類能夠一起工作。

橋接模式:將抽象部分與它的實現部分分離,使它們都能夠獨立地變化。

組合模式:將物件組合成樹形結構以表示「部分—總體」的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。

裝飾模式:動態地給乙個物件加入一些額外的職責,就新增功能來說,裝飾模式相比生成子類更加靈活。

外觀模式:為子系統中的一組介面提供乙個一致的介面。外觀模式定義了乙個高層介面,這個介面使得這乙個系統更加easy使用。

享元模式:為執行共享技術有效地支援大量細粒度的物件。

**模式:為其它物件提供一種**以控制對這個物件的訪問。

好了,各個門派已經登台,大戰一觸即發。我們拭目以待:

首先出招的是介面卡模式:在現實世界裡。變化無處不在。物件導向的出現就是為了更好的應對需求的變化。然而假設你想使用乙個已經存在的類,而它的介面不符合要求。或者希望建立乙個能夠復用的類,該類能夠與其它不相關的類或不可預見的類協同工作,怎麼辦?哈哈哈……我們能夠做到讓這些介面不同的類通過適配後,協同工作。

主動出擊效果不凡,橋接模式接招:面對變化。物件導向的繼承的確是不錯,可是過度使用,勢必會造成類的結構過於複雜,關係太密,難以維護。更加致命的是擴充套件性極差。

而我們能夠研究整合體系中,假設有兩個甚至多個方向的變化,那麼就解耦這些不同方向的變化。通過物件組合的方式,把兩個角色之間的繼承關係改為了組合的關係。從而使這兩者能夠應對各自獨立的變化。怎麼樣,厲害吧?

裝飾模式乃女子門派,雖為女流之輩。但麵無懼色:面對變化,假設採用生成子類的方法進行擴充,為支援每一種擴充套件的組合,會產生大量的子類。如此子類數目太多了,然而其實這些子類無非就是為某個物件新增一些職責。此時通過裝飾的方式。能夠更加靈活、以動態、透明的方式給單個物件加入職責,並在不須要時,撤銷對應的職責。

組合模式一看這架勢,不得不使出自己的獨門絕技:我們擅長於表示物件的部分與總體的層次結構,希望使用者忽略組合物件和單個物件的不同。使用者能夠統一地使用組合結構中的全部物件。

使用者使用組合類介面與組合結構中的物件進行互動,假設接收者是乙個葉節點,則直接處理。假設是組合物件。通常將請求傳送給它的子部件,並在**之前或之後可能執行一些輔助操作,其效果是客戶能夠相同的方式使用組合結構和單個物件。不論什麼用到基本物件的地方都能夠使用組合物件。

外觀模式按耐不住,大喝一聲,凌空而起:類之間的耦合性越弱,越有利於復用。假設兩個類不必直接打交道,那麼就不要讓這兩個類發生直接的相互作用,必要時,能夠借助第三者來**呼叫。我們的獨門絕學是引入乙個外觀物件,它為子系統間提供乙個單一而簡單的屏障。通常企業軟體的三層或者n層架構,層與層之間地分離事實上就是外觀模式的體現。

享元模式,拍案而起,口中大喊,我來試試:物件使得記憶體占用過多。並且假設都是大量反覆的物件。那就是資源的極大浪費,會使得機器效能減慢。物件導向技術有時會因簡單設計而代價極大,比方文件處理軟體。其中的字元都能夠是物件,假設讓文件中的每個字元都是乙個字元物件的話,系統開銷令人汗顏。

而文件之中的字元無非就是寫符號,我們讓全部同樣的符號都共享乙個物件,比如全部的「a」都共享乙個「a」物件。節約記憶體。

**模式腳尖點地,騰空而起,直接向外觀模式和介面卡模式的方向奔去:**與外觀差別在於:**物件代表乙個單一物件兒外觀物件代表乙個子系統;**的客戶物件無法直接訪問目標物件,由**提供對單獨的目標物件的訪問控制。而外觀的客戶物件能夠直接訪問子系統中的各個物件,但通常由外觀物件提供對子系統各元件功能的簡化的共同層次的呼叫介面。至於我和介面卡,事實上都屬於一種銜接性質的功能。**是一種原來物件的代表,其它須要與這個物件打交道的操作都是和這個代表交涉。而介面卡則不須要虛構出乙個代表者,僅僅須要為應付特定使用目的,將原來的類進行一些組合罷了。

最後外觀模式使出了威力巨大的三分歸元氣,頓時天昏地暗。飛沙走石:橋接和介面卡被用於軟體生命週期的不同階段,針對不同問題,孰優孰劣,無從談起。而我和介面卡有些近似,都是對現存系統的封裝。有人說我是另外一組物件的介面卡,我認為不妥。由於我定義的是乙個新的介面,而介面卡則是復用乙個原有的介面。介面卡是使兩個已有的介面協同工作,而我則是為現存系統提供乙個更為方便的訪問介面。

假設硬要說我是適配,那麼我僅僅能說適配是用來適配物件的,而我則是用來適配整個系統的。誰更厲害,明眼人都看得出來。

激戰之後。斷壁殘垣,一片狼藉,但勝者僅僅有乙個:

誰是物件導向的設計霸主?(上)

在取向的物件世界,永遠沒有最好的設計模式最強。每種模式從來沒有任何人誰也不服,每個內訌。絕不放手。今天。連同簡單工廠模式,包括24設計模式聚集在中原,間。烏雲密布。殺氣沖天,物件導向的世界裡要迎來一場浩劫。血雨腥風,在所難免 在資格賽中,來自工廠家族的簡單工廠模式首先被滅掉了,其致命的失誤在於簡單工...

說說物件導向中的設計原則

srp 單一職責原則,就是說乙個類只提供一種功能和權有乙個引起它變化的因素.ocp 開放封閉原則就是對乙個類來說,對它的修改是封閉的,對它的擴充套件是開放的.dip ioc 依賴倒置原則 程式依賴於抽象,而不依賴於實現,它的主要目的是為了降低 耦合性,它一般通過反射和配置檔案來實現的.lsp 替換原...

物件導向中的幾種設計模式

1.為什麼會出現單例模式呢 在同一作用域下會出現相同的姓名時,就需使用這個單例模式。單例模式一般都會結合閉包一起來使用的 let name 張三 let age 20 let 男 let name 李四 let age 21 let 男 2.單例模式是幹嘛的 把描述當前事務的資訊進行分組歸類 減少全...