前言
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义一个高层的接口,这个接口使得这一子系统更加容易使用。
一、子类
子类系统负责处理Facade对象指派的任务,子类中没有Facade的任何信息,既没有facade对象的引用
1 public class SubSystemOne
2 {
3 public void MethodOne()
4 {
5 Console.WriteLine("子系统方法一");
6 }
7 }
8 public class SubSystemTwo
9 {
10 public void MethodTwo()
11 {
12 Console.WriteLine("子系统方法二");
13 }
14 }
15 public class SubSystemThree
16 {
17 public void MethodThree()
18 {
19 Console.WriteLine("子系统方法三");
20 }
21 }
22 public class SubSystemFour
23 {
24 public void MethodFour()
25 {
26 Console.WriteLine("子系统方法四");
27 }
28 }
二、外观类
知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。
1 public class Facade
2 {
3 SubSystemOne one;
4 SubSystemTwo two;
5 SubSystemThree three;
6 SubSystemFour four;
7 public Facade()
8 {
9 one = new SubSystemOne();
10 two = new SubSystemTwo();
11 three = new SubSystemThree();
12 four = new SubSystemFour();
13 }
14 public void MethodA()
15 {
16 Console.WriteLine("方法组A()======");
17 one.MethodOne();
18 two.MethodTwo();
19 four.MethodFour();
20 }
21
22 public void MethodB()
23 {
24 Console.WriteLine("方法组B()======");
25 one.MethodOne();
26 three.MethodThree();
27 four.MethodFour();
28 }
29 }
三、客户端
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 Facade facade = new Facade();
6 facade.MethodA();
7 facade.MethodB();
8
9 Console.ReadKey();
10 }
11 }
总结
在设计初期,应该有意识的将不同的两个层分离,如:经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。
在开发阶段,子系统往往因不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少他们之间的依赖。
在维护一个遗留的大系统事,可能这个系统已经非常难以维护和扩展。
可以为新系统开发一个外观facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与facade对象交互,facade与遗留代码交互所有复杂的工作。
参考数据:大话设计模式