文章出處

返回目錄

門面模式(Facade)屬于結構型模式的一種,它符合面向對象的封裝原則,但又不符合開閉原則,呵呵,今天我們主要說它的優點,不談缺點.

定義

門面模式,是指提供一個統一的接口去訪問多個子系統的多個不同的接口,它為子系統中的一組接口提供一個統一的高層接口。使用子系統更容易使用。

技巧

我們在設計子類時,由于外部通過門面去訪問它的功能,所以一般子類都會被聲明為internal.

何時能用到它?

1、客戶只需要使用某個復雜系統的子集,或者需要以一種特殊的方式與系統交互時,使用門面模式。
2、當需要跟蹤原系統的使用情況時 ,使用門面模面模式。因為所有對系統的訪問都經過FACADE,所以可以很容易地監視系統的使用 。
3、希望封裝和隱藏原系統時。
4、編寫新類的成本小于所有人使用和維護原系統使用所需的成本時

觀察者模式的結構圖

觀察者模式實現說明

FacadeFactory:門面對象,對外公開,將子系統進行組合,或者將子系統進行條件的篩選等等

Sub1:子系統1,它實現了IFacade接口

Sub2:子類型2,它實現了IFacade接口

IFacade:統一接口,可有可無,子類型去實現它,有時在門面類里需要通過接口來訪問子系統時,需要這個接口

觀察者模式的C#實現

#region 門面
    public interface IFacade
    {
        void Implement();
    }
    public class FacadeFactory
    {
        int _subtype;
public FacadeFactory()
            : this(1)
        {

        }
public FacadeFactory(int subType) { _subtype = subType; } public void Action() { //情況1,子類型的組合 new Sub1().Implement(); new Sub2().Implement(); //情況2,子類型的選擇 switch (_subtype) { case 1: new Sub1().Implement(); break; case 2: new Sub2().Implement(); break; default: throw new ArgumentException("子系統參數有誤"); } } } internal class Sub1 : IFacade { public void Implement() { Console.WriteLine("這是子系統1"); } } internal class Sub2 : IFacade { public void Implement() { Console.WriteLine("這是子系統2"); } } #endregion

調用代碼

  new FacadeFactory().Action();

結果截圖

返回目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()