设计模式——外观模式

  外观模式——为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

  外观模式是指当有很多的类,它们实现不同的功能,可能出现很多种的组合功能,需要在客户端不停的去实现,造成了客户端责任不单一,代码过多、重复、易变等问题,外观模式可以解决这一问题。

1.SubSystem类,子系统,包含了很多的功能实现,要实现这些功能需要在客户端创建这些组合

 1 /// <summary>
 2 /// 子系统1
 3 /// </summary>
 4 public class SubSystemOne
 5 {
 6     public void MethodOne()
 7     {
 8         //子系统方法1
 9     }
10 }
11 
12 /// <summary>
13 /// 子系统2
14 /// </summary>
15 public class SubSystemTwo
16 {
17     public void MethodTwo()
18     {
19         //子系统方法2
20     }
21 }
22 
23 /// <summary>
24 /// 子系统3
25 /// </summary>
26 public class SubSystemThree
27 {
28     public void MethodThree()
29     {
30         //子系统方法3
31     }
32 }
33 
34 /// <summary>
35 /// 子系统4
36 /// </summary>
37 public class SubSystemFour
38 {
39     public void MethodFour()
40     {
41         //子系统方法4
42     }
43 }
SubSystem.cs

2.Facade类,外观类,使各个子系统进行整合,统一给外界调用,它需要了解所有子系统的方法或者属性,进行组合,以备外界调用

 1 /// <summary>
 2 /// 外观类
 3 /// </summary>
 4 public class Facade
 5 {
 6     //子系统
 7     private readonly SubSystemOne _one;
 8     private readonly SubSystemTwo _two;
 9     private readonly SubSystemThree _three;
10     private readonly SubSystemFour _four;
11 
12     /// <summary>
13     /// 构造方法进行创建子系统
14     /// </summary>
15     public Facade()
16     {
17         _one=new SubSystemOne();
18         _two=new SubSystemTwo();
19         _three=new SubSystemThree();
20         _four =new SubSystemFour();
21     }
22 
23     /// <summary>
24     /// 组合方式A
25     /// </summary>
26     public void MethodA()
27     {
28         _one.MethodOne();
29         _two.MethodTwo();
30         _three.MethodThree();
31     }
32 
33     /// <summary>
34     /// 组合方式B
35     /// </summary>
36     public void MethodB()
37     {
38         _two.MethodTwo();
39         _four.MethodFour();
40     }
41 }
Facade.cs

3.客户端代码,不必知道子系统的实现方法,甚至根本不必只有有这么多子系统,就可以实现功能

 1 class Program
 2 {
 3     static void Main(string[] args)
 4     {
 5         //创建外观对象
 6         var facade = new Facade();
 7         //让外观类实现组合A的功能
 8         facade.MethodA();
 9         //让外观类实现组合B的功能
10         facade.MethodB();
11     }
12 }
Program.cs

  外观模式使用情况比较多,大致分为以下三种:

  (1)在项目设计初期阶段,有意识的将不同的层分离,在层与曾之间建立外观模式,降低耦合性;

  (2)在开发阶段,子系统往往因为不停的重构烟花而变得越来越复杂,增加外观模式可以提供一个简单的接口,减少它们的依赖;

  (3)在维护一个遗留的大型项目时,可能这个系统已经非常难以维护和扩展了,但因为它包含了非常重要的功能,新的需求必须依靠它,此时使用外观模式,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂工作。

                                                      以上内容部分参考程杰的《大话设计模式》一书

posted @ 2013-05-26 16:24  Kitten Zhang  阅读(156)  评论(0编辑  收藏  举报