C#/.NET 外觀模式,三層/N層開發
阿新 • • 發佈:2019-01-09
C# 外觀模式
外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增一個介面,來隱藏系統的複雜性。
這種模式涉及到一個單一的類,該類提供了客戶端請求的簡化方法和對現有系統類方法的委託呼叫。
介紹
**意圖:**為子系統中的一組介面提供一個一致的介面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
**主要解決:**降低訪問複雜系統的內部子系統時的複雜度,簡化客戶端與之的介面。
何時使用: 1、客戶端不需要知道系統內部的複雜聯絡,整個系統只需提供一個"接待員"即可。 2、定義系統的入口。
**如何解決:**客戶端不與系統耦合,外觀類與系統耦合。
**關鍵程式碼:**在客戶端和複雜系統之間再加一層,這一層將呼叫順序、依賴關係等處理好。
應用例項:
1、去醫院看病,可能要去掛號、門診、劃價、取藥,讓患者或患者家屬覺得很複雜,如果有提供接待人員,只讓接待人員來處理,就很方便。
2、ASP 的三層開發模式。
優點: 1、減少系統相互依賴。 2、提高靈活性。 3、提高了安全性。
**缺點:**不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。
使用場景: 1、為複雜的模組或子系統提供外界訪問的模組。 2、子系統相對獨立。 3、預防低水平人員帶來的風險。
**注意事項:**在層次化結構中,可以使用外觀模式定義系統中每一層的入口。
實現
我們將建立一個 Shape 介面和實現了 Shape 介面的實體類。下一步是定義一個外觀類 ShapeMaker。
ShapeMaker 類使用實體類來代表使用者對這些類的呼叫。FacadePatternDemo,我們的演示類使用 ShapeMaker 類來顯示結果。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 外觀模式 { class Program { static void Main(string[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.DrawCircle(); shapeMaker.DrawRectangle(); shapeMaker.DrawSquare(); Console.ReadKey(); } } /// <summary> /// 步驟 1 建立一個介面。 /// </summary> public interface Shape { void Draw(); } /// <summary> /// 步驟 2 建立實現介面的實體類。 /// </summary> public class Rectangle : Shape { public void Draw() { Console.WriteLine("Rectangle::draw()"); } } public class Square : Shape { public void Draw() { Console.WriteLine("Square ::draw()"); } } public class Circle : Shape { public void Draw() { Console.WriteLine("Circle ::draw()"); } } /// <summary> /// 步驟 3 建立一個外觀類。 /// </summary> public class ShapeMaker { private Shape circle; private Shape rectangle; private Shape square; public ShapeMaker() { circle = new Circle(); rectangle = new Rectangle(); square = new Square(); } public void DrawCircle() { circle.Draw(); } public void DrawRectangle() { rectangle.Draw(); } public void DrawSquare() { square.Draw(); } } }