1. 程式人生 > >結構型模式學習總結

結構型模式學習總結

        最近我正在自己學習設計模式,剛學完建立型、結構型和行為型模式,現在對我的學習到結構型模式的內容進行歸納總結。我不是一個拘泥於形式的人,不追求標準答案,只追求自己的答案,好了,廢話不多說,下面開始總結。

        一、設計模式分類

        按照設計模式的目的,可分為:建立型、結構型、行為型三種。 建立型模式主要用於物件的建立,結構型模式處理類和物件的組合,行為型模式描述類或物件的職責。

        按照設計模式的範圍,可分為適用於類和適用於物件兩種。類模式處理類和子類間的關係,物件模式處理物件間的關係。

        二、結構型模式

        1、介面卡模式

         什麼是介面卡,通俗一點說就是一種起中間連線作用的配件。同理,介面卡模式主要作用就是要將兩個介面不同的模組連線在一起,使其中一個模組可以使用另一個模組的功能。

        舉個例子,比如說我們想要除錯裝置,需要這樣一根線,它一端連線我們膝上型電腦的USB介面,另一端連線我們所要除錯裝置的COM口。這根線就是介面卡。在程式碼中的情況就是,目標模組需要呼叫被適配者模組的某個介面(比如void interface(char))來實現目標模組自己的某個介面(比如void interface(int)),可問題是他們的介面並不相同,介面卡(類)通過繼承目標模組的介面(後面稱為目標介面),並通過呼叫被適配者模組提供的介面(我稱它為服務介面)來重寫目標介面的實現,這樣一來,當例項為介面卡時,呼叫目標模組的介面,就實際呼叫了介面卡的介面,同時也就呼叫了被適配者模組提供的介面。

        實現介面卡的方法有兩種,一種是通過類繼承的方法,令介面卡(類)繼承目標模組的介面和被適配者模組的實現,優點是訪問被適配者的內部起來成員比較方便,可以直接呼叫,不必建立更多的物件,缺點是不夠靈活;另一種是通過令介面卡(類)繼承目標模組的介面同時內部成員包含被適配者的物件,優點是靈活,易擴充套件,修改實現,缺點就是更復雜,需要通過改變成員中被適配者的物件來改變實現。

        2、橋接模式

        我們知道,橋樑可以將完全相隔的兩個地方給連通起來,而橋接模式則是一種將介面與實現分離,又通過邏輯上的橋來建立介面與實現之間的聯絡,以實現介面和實現都能獨立變化的鬆散耦合結構。

        舉個例子,市場部有一個員工專門負責瞭解客戶的需求,再把這個需求分配給研發部門的一個員工完成。這時,市場部的員工就是介面,研發部的員工就是實現。介面與實現之間通過邏輯上的“橋”來聯絡,如市場部員工向研發部員工提出需求。同時我們的市場部員工和研發部員工又都能獨立的變化,比如我可以用市場部的A員工瞭解客戶需求,用研發部員工B來處理這個需求。如果有一天發現研發部的員工B不能很好的完成需求,那麼我們可以換做用研發部員工C來完成,因為員工A和員工B是鬆散關係,並不是必須要員工A和員工B一起才能完成任務,員工A和員工C配合也是可以的。

        再強調一下,橋接模式是一種將介面與實現分離,又通過邏輯上的橋來建立介面與實現之間的聯絡,以實現介面和實現都能獨立變化的鬆散耦合結構。

        3、組合模式

        組合就是多個物件“揉”到一起而“生成”的一個組合物件。組合模式還有一個更重要的特徵,一個被組合而成的物件既可以是組成它的多個物件的容器,又可以是另一個組合而成物件的其中一個組成單元。即可以忽略容器與組成單元的區別。

        舉個例子,我們都玩過拼圖遊戲,拼圖A和拼圖B拼成了拼圖C,而我們認為拼圖C和拼圖A、B並沒有本質上的區別,都是完整拼圖的一部分,都可以與其他合適的拼圖拼成更大的一塊。

        所以組合是這樣一種結構,既可以是多個部分組合而成整體,又可以是可以組合成某個整體的部分。

        未完待續