文章出處
文章列表
門面模式(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();
結果截圖
文章列表
全站熱搜