外觀模式(Facade): 外部通過一個統一的介面,訪問子系統中的一群介面。外觀模式定義了一個高層介面,為子系統中的一組介面提供一個一致的入口,使得子系統更容易使用。外觀模式相對比較簡單,可以理解為中介,原先租房需要自己一個個篩選,聯繫房東,談好價格,簽合同等等,現在不需要這些了,只要你說出要求中介 ...
外觀模式(Facade):
外部通過一個統一的介面,訪問子系統中的一群介面。外觀模式定義了一個高層介面,為子系統中的一組介面提供一個一致的入口,使得子系統更容易使用。外觀模式相對比較簡單,可以理解為中介,原先租房需要自己一個個篩選,聯繫房東,談好價格,簽合同等等,現在不需要這些了,只要你說出要求中介就會將房子找好,你只需要掏錢簽合同就可以了,不需要關係其他瑣碎的事情。
外觀模式的角色:
1)外觀角色:為多個子系統對外提供一個共同的介面;
2)子系統角色:實現系統的部分功能,客戶可以通過外觀角色訪問它;
3)客戶角色:通過一個外觀角色訪問各個子系統的功能。
1 internal class Program 2 { 3 private static void Main(string[] args) 4 { 5 Facade facade = new Facade(); 6 facade.method(); 7 } 8 } 9 10 internal class Facade 11 { 12 private SubSystem01 subSystem01; 13 private SubSystem02 subSystem02; 14 private SubSystem03 subSystem03; 15 16 public Facade() 17 { 18 this.subSystem01 = new SubSystem01(); 19 this.subSystem02 = new SubSystem02(); 20 this.subSystem03 = new SubSystem03(); 21 } 22 23 public void method() 24 { 25 subSystem01.method(); 26 subSystem02.method(); 27 subSystem03.method(); 28 } 29 } 30 31 public class SubSystem01 32 { 33 public void method() 34 { 35 Console.WriteLine($"{nameof(SubSystem01)}-{nameof(method)}"); 36 } 37 } 38 39 public class SubSystem02 40 { 41 public void method() 42 { 43 Console.WriteLine($"{nameof(SubSystem02)}-{nameof(method)}"); 44 } 45 } 46 47 public class SubSystem03 48 { 49 public void method() 50 { 51 Console.WriteLine($"{nameof(SubSystem03)}-{nameof(method)}"); 52 } 53 }
外觀模式的優缺點:
優點:外觀模式是迪米特法則的典型應用。
1)降低了子系統與客戶端之間的耦合度,使得子系統的變化不會影響調用它的客戶類;
2)對客戶屏蔽了子系統組件,減少了客戶處理的對象數目,並使得子系統使用起來更加容易;
3)降低了大型軟體系統中的編譯依賴性,簡化了系統在不同平臺之間的移植過程,因為編譯一個子系統不會影響其他的子系統,也不會影響外觀對象。
缺點:
1)不能很好的限制客戶使用子系統;
2)違背了開閉原則
參考:http://c.biancheng.net/view/1369.html