【设计模式】外观模式——“知道有它就行了,内容不要你懂。”
【前言】
最近在进行机房收费系统的重构,三层架构中加了两个设计模式——外观和抽象工厂。所以,又拿出了设计模式的书再复习一下。 再看外观模式就像一个主机的外壳——子系统内部有哪些接口你不需要知道,你客户端只要知道我外观层提供给的接口就好了。用外观模式, 就像米老师讲快速阅读时说的:“知道有它就行了,内容不要你懂。”
【UML图】
【demo实现】
外观类:
<span style="font-size:24px;">using System; namespace System </span>
<span style="font-size:24px;">{ public class facade { SubSystemOne one; SubSystemTwo two; SubsystemThree three; SubSystemFour four; public facade() { one = new SubSystemOne(); two = new SubSystemTwo(); three = new SubsystemThree(); four = new SubSystemFour(); } ~facade() { } public virtual void Dispose(){ } public void MethodA() { Console.WriteLine("\n 方法组A()————"); one.MethodOne(); two .MethodTwo (); four.MethodFour(); } public void MethodB() { Console.WriteLine("\n 方法组B()————"); two.MethodTwo(); three.Methodthree(); } }//end facade }//end namespace System</span>
<span style="font-size:24px;">namespace System { public class SubSystemOne { public SubSystemOne(){ } ~SubSystemOne(){ } public virtual void Dispose(){ } public void MethodOne(){ Console.WriteLine("子系统方法一"); } }//end SubSystemOne }//end namespace System</span>
<span style="font-size:24px;">namespace System { public class SubSystemTwo { public SubSystemTwo(){ } ~SubSystemTwo(){ } public virtual void Dispose(){ } public void MethodTwo() { Console.WriteLine("子系统方法二"); } }//end SubSystemTwo }//end namespace System</span>
<span style="font-size:24px;">namespace System { public class SubsystemThree { public SubsystemThree(){ } ~SubsystemThree(){ } public virtual void Dispose(){ } public void Methodthree(){ Console.WriteLine("子系统方法三"); } }//end SubsystemThree }//end namespace System</span>
<span style="font-size:24px;">namespace System { public class SubSystemFour { public SubSystemFour(){ } ~SubSystemFour(){ } public virtual void Dispose() { } public void MethodFour() { Console .WriteLine("子系统方法四"); } } }</span>客户端代码:
<span style="font-size:24px;">namespace ConsoleApplication4 { class Program { static void Main(string[] args) { facade facade = new facade(); facade.MethodA(); facade.MethodB(); Console.Read(); } } } </span>
【适用情况】
1.三层架构中
2.子系统因为不断重构演化而变得越来越复杂,用facade减少依赖
3.维护一个遗留的大型系统中,用facade来与新系统交互。
【优点】
(1)实现了子系统与客户端之间的松耦合关系。
(2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
【总结】
设计模式的核心就是解耦, 就是一些解耦合的方法。