C#設計模式——面板模式

來源:互聯網
上載者:User
面板模式: 面板模式是很常用的模式,在軟體開發過程中,用戶端程式經常會與複雜系統的內部子系統進行耦合,從而導致用戶端程式隨著子系統的變化而變化,然而為了將複雜系統的內部子系統與用戶端之間的依賴解耦,從而就有了面板模式,也稱作 ”門面“模式。下面我為大家介紹一下有關面板模式的知識。 一、定義: 為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,找個介面使得這一子系統更加容易使用。 二、目的: 降低系統的複雜程度。 三、聯絡生活: 為什麼說它降低了系統的複雜程度呢。 比如我們假期做飯,自己做飯的話,我們需要菜,米,碗,筷,類之間互動關係是怎樣的,而如果我們在外面買飯又是怎樣的呢:                
在飯店吃飯就設計到了一個模式——面板模式。對面板模式我的理解:把很多子類裝到一個袋子裡,只有一個口,這個口就是Facade外觀類,相當於飯店服務員,我們只需要告訴服務員想吃什麼,他們就可以給做出來,而不用我們和菜、米等之間互動。由此可見,通過面板模式,我們可以降低系統的耦合,類之間可以不必相互互動,而是通過一個外觀類實現A和B的訪問,大大降低了耦合性。 四、優缺點: 1、優點: 完美體現依賴倒轉和迪米特。 (1)面板模式對客戶屏蔽了子系統組件,從而簡化了介面,減少了客戶處理的對象數目並使子系統的使用更加簡單。 (2)它實現了子系統與客戶之間的松耦合關係,而子系統內部的功能組件是緊耦合的。松耦合使得子系統的組件變化不會影響到它的客戶。 2、缺點: 在物件導向軟體系統中,會用到很多類,面板模式的引入使得類之間的耦合性減低,但是如果想要引入更多的類,卻需要更改外觀類,這一點來看,面板模式是不符合開閉原則的,雖然他使其更改容易。 五、應用: 1、面板模式結構圖:
2、代碼展示: 先寫出四個子系統的類:     class SubSystemOne     {         public void MethodOne()         {             Console.WriteLine("子系統方法一");         }     }     class SubSystemTwo     {         public void MethodTwo()         {             Console.WriteLine("子系統方法二");         }     }     class SubSystemThree     {         public void MethodThree()         {             Console.WriteLine("子系統方法三");         }     }     class SubSystemFour     {         public void MethodFour()         {             Console.WriteLine("子系統犯法四");         }     } 引入外觀類,減少子系統類之間的互動:     //需要瞭解所有的子系統的方法或屬性,進行組合,以備外界調用     class Facade     {         SubSystemOne one;         SubSystemTwo two;         SubSystemThree three;         SubSystemFour four;         public Facade()         {             one = new SubSystemOne();             two = new SubSystemTwo();             three = new SubSystemThree();             four = new SubSystemFour();         }         public void MethodA()         {             Console.WriteLine("\n方法組合A()---");             one.MethodOne();             two.MethodTwo();             four.MethodFour();         }         public void MethodB()         {             Console.WriteLine("\n方法組B()---");             two.MethodTwo();             three.MethodThree();         }     }   用戶端調用:     //由於Facade的作用,用戶端可以根本不知道三個子系統類的存在,代碼比較簡潔     static void Main(string[] args)     {         Facade facade = new Facade();         facade.MethodA();         facade.MethodB();         Console.Read();     } 3、何時使用。 設計初期:有意識的將不同的兩個層分離。
開發階段:子系統往往因為不斷地重構煙花而變得越來越複雜,大多數模式使用時都會產生很多很小的類,本是好事,但給外部調用他們的使用者程式帶來了使用上的困難,增加外觀FFacade可以提供一個簡單地額介面,減少他們之間的依賴。
維護:難以維護和擴充時,為新系統開發一個外觀Facade類,提供設計粗糙和高度複雜的遺留代碼的比較清晰簡單的介面,讓新系統與Facade對象互動,Facade與遺留代碼互動所有複雜的工作。
六、總結: 引入外觀類,通過將類封裝,實現了一個高層介面,降低了系統的複雜程度,這樣的實現方式非常類似適配器模式,然而面板模式與適配器模式不同的是:適配器模式是將一個對象封裝起來以改變其介面,而面板模式是將一群對象 ”封裝“起來以簡化其介面。但是大家不要忘了,如果引入一個新的子系統,我們需要修改子系統,這樣就不符合開閉原則了,所以每個模式都有它好的一面,也有它不好的一面。 最後我想問大家一個問題:簡單原廠模式不符合開閉原則,而面板模式也不符合,為何面板模式就可以歸入23種模式,而簡單工廠卻不行。如果說簡單原廠模式是因為Factory 方法模式已經將它的不足改正了,所以有Factory 方法模式就可以了,可是面板模式不符合開閉原則,歸入23種模式怎麼說通呢。 感謝和您的交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.