自我聯想學設計模式(初級版)-4-組合模式
WHAT?
既然說了是組合,那麼肯定參與組合的不止一個,是多個。但是不是任意物件組合起來都可以成為組合模式呢?
其實不然。
這多個物件,它們彼此之間必須有“整體/部分”的關係,並且你想用一致的方式對待這些兌現時,你就需要組合模式。
那麼所謂的“整體/部分”關係,指的是什麼呢?
HeadFirst裡舉例使用的使用者介面,一些頂層元件(像是Frame或Panel)包含著其他元件(像選單,文字面板,滾動條,按鈕),你的GUI包含了若干部分,但是當你顯示它的時候,你認為它是一個整體。你告訴頂層的元件顯示,然後就放手不管,由頂層元件負責顯示所有相關的部分。
這裡的Menu中包含一個MenuComponent的列表,其中既可以放Menu,也可以放MenuItem。它們都繼承了MenuComponent抽象類。
WHY?
很簡單,如果我們開啟任何一個軟體,參考它的選單的話,就會發現,其實點選了上層的選單之後,下層選單也都顯示出來了,所以可以通過這個樹狀的結構,用最上面的根節點控制葉子節點的顯示和動作。
HOW?
因為繼承了相同的介面,所以可以層層傳遞,直接呼叫子類的函式
相關推薦
自我聯想學設計模式(初級版)-4-組合模式
WHAT? 既然說了是組合,那麼肯定參與組合的不止一個,是多個。但是不是任意物件組合起來都可以成為組合模式呢? 其實不然。 這多個物件,它們彼此之間必須有“整體/部分”的關係,並且你想用一致的方式對待這些兌現時,你就需要組合模式。 那麼所謂的“整體/部分”關係,指的是什麼呢?
自我聯想學設計模式(初級版)-3-策略模式
在具體怎麼使用策略模式之前,我們先自己定義一下什麼策略,所謂策略就是做某種事的方法吧,比如我們去火星,可以使用SpaceX的火箭,可以乘坐BlueOrigine的火箭,也可以乘坐俄羅斯的火箭,這就是做同一件事,策略不同。 那麼我們發現其實無論坐誰的火箭去火星,都要完成一個演算法,去火星。所以
自我聯想學設計模式(初級版)-2-狀態模式
狀態模式顧名思義就是一個物件有多個狀態,這裡以談戀愛為例。 首先我們搞清楚為什麼要使用狀態模式,其實很簡單,就是減輕心智負擔,因為一個物件它的狀態不同,對於同一種事情的反應也不同,如果你女朋友心情好,那麼你要求什麼她也會答應,如果她心情差,那麼你同樣的要求就會有各種各樣的迴應。 假設她平
自我聯想學設計模式(初級版)-1-觀察者模式
如果單純的看書,其實很容易陷入到各種概念中去,最終導致似乎懂了,但實際開始使用的時候又有各種問題。這個版本的設計模式只從實用來入手,就是在各種情況下,根據聯想快速的代入這個模式,能夠迅速用起來,轉化為程式碼。所以這個版本的設計模式都以現實中的例子自己聯想。 假設我以去電影院看電影為例,因為觀
解讀GoF的23鐘設計模式(濃縮版)
style ref gof shuf blank gin qtp tns com 2MIU5P075E促http://jz.docin.com/sina_5848269111 7r奔1C5IY航椅5http://shequ.docin.com/sina_6270047027
設計模式-(14)裝飾者模式 (swift版)
實現 info 有一個 istview listview 接口 tor true lis 一,概念 裝飾者模式(Decorator):動態地為一個對象添加一些額外的職責,若要擴展一個對象的功能,裝飾者提供了比繼承更有彈性的替代方案。 多組合,少繼承 二,UML圖
設計模式-(15)責任鏈模式 (swift版)
uiview ike recent ios part mage protoc ins handle 一,概念: 責任鏈模式(Chain of Responsibility Pattern)為請求創建了一個接收者對象的鏈。這種模式給予請求的類型,對請求的發送者和接收者進行
設計模式-(16)模版模式 (swift版)
基本 protect pla without 屬性 模板方法 分享圖片 dal ont 一,概念: 定義一個算法中的操作框架,而將一些步驟延遲到子類中。使得子類可以不改變算法的結構即可重定義該算法的某些特定步驟。(Define the skeleton of an al
設計模式-(17)策略模式 (swift版)
clas PC ring override 角色 var 有一個 包裝 封裝 一,概念: 策略模式定義了一系列的算法,並將每一個算法封裝起來,而且使他們可以相互替換,讓算法獨立於使用它的客戶而獨立變化。 二,使用場景 1.針對同一類型問題的多種處理方式,僅僅是具
大話設計模式之簡單工廠模式(Java版)
大話設計模式——第一章(簡單工廠模式) 題目:請用C++、Java、C#或VB.NET任意一種面嚮物件語言實現一個計算器控制檯程式,要求輸入兩個數和運算子號,得到結果。 import java.io.Console; import java.util.Scanner; /**
《大話設計模式》之簡單工廠模式(Java版)
##導火線: “請用C++、Java、C#或VB.NET任意一種面嚮物件語言實現一個計算器控制檯程式,要求輸入兩個數和運算子號,得到結果。” #菜鳥階段的程式設計: public class demo { public static void m
用例項理解設計模式——代理模式(Python版)
代理模式:為其他物件提供一種代理以控制對這個物件的訪問。 在某些情況下,一個物件不適合或者不能直接引用另一個物件,而代理物件可以在客戶端和目標物件之間起到中介的作用。 代理模式分為: 靜態代理 動態代理 由下面三部分組成: 抽象角色:通過介面或抽象類宣告真實角色實現的業務方法。 代理角色:實現抽象角色
設計模式(十八)---模板方法模式
strac string package style prim res 不同的 好的 clas 1、簡介 模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,然後聲明一些抽象方法來迫使子類實現剩余的邏輯。 不同的子類可以以不同
設計模式(十八)——職責鏈模式
設計模式 職責鏈模式設計模式(十八)——職責鏈模式一、職責鏈模式簡介1、職責鏈模式簡介職責鏈模式(Chain Of Responsibility)使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合。將可能處理請求的對象連成一條鏈,並沿著這條鏈傳遞請求,直到有一個對象處理請求為止。2、職責連模式
設計模式(二十三)——中介者模式
設計模式 中介者模式設計模式(二十三)——中介者模式一、中介者模式簡介1、中介者模式簡介 中介者模式用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。 中介者模式中,每個同事對象維護一個中介者,當要進行通信時,每個具體的同
設計模式(十五)——橋接模式
不用 java 高層 ext 部分 獨立 lib 類型 ray 1.描述 將橋接部分與他的實現部分分離,是他們都可以獨立的變化。 2.模式的使用 ·抽象(Abstraction):是一個抽象類,該抽象類含有Implementor的聲明,即維護一個Implementor類型
設計模式(十七)——模板方法模式
ring next pri cut 限制 pack [] eat 模式 1.描述 定義一個操作中算法的骨架,而將一些步驟延伸到子類當中。模板方法使子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 2.模式的使用 ·抽象模板(Abstract Template):
設計模式(十二)—— 享元模式
方便 表示 復雜 優缺點 強制 port n) 使用場景 nfa 模式簡介 運用共享技術有效地支持大量細粒度地對象。 通常情況下,面向對象技術可以增強系統地靈活性及可擴展性,在系統開發過程中,我們會不斷地增加類和對象。當對象數量過多時,將會帶來系統開銷過高、性能下降等
吉大計算機學碩複試(回憶版)-2015(沒全寫)
1、編寫一演算法,將X插入到不減有序序列的合適位置,讓序列繼續有序。(10分) #include<stdio.h> #define N 100 #define length 9 int main(){ int *Insert(int *A,int num,int len)
設計模式(十八)橋接模式
橋接模式(Bridge),將抽象部分與他的實現部分分離,使他們都可以獨立地變化 類圖的來源 http://img5.imgtn.bdimg.com/it/u=1548947177,2280329040&fm=26&gp=0.jpg public abstract