DesignPattern.Ch12.Facade.Node

引用炒股票与买基金来解释“外观模式”,为用户抽象出复杂业务调用过程,提供一个简单的对外统一调用“接口”。

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

子系统代码模拟:

Facade.SubSystem.impl.Code
 1     class SubSystemOne
 2     {
 3         public void MethodOne()
 4         {
 5             Console.WriteLine("子系统方法一。");
 6         }
 7     }
 8     class SubSystemTwo
 9     {
10         public void MethodTwo()
11         {
12             Console.WriteLine("子系统方法二。");
13         }
14     }
15     class SubSystemThree
16     {
17         public void MethodThree()
18         {
19             Console.WriteLine("子系统方法三。");
20         }
21     }

外观类模拟:(外观类,需要了解所有子系统的方法和属性,进行组合以备外界使用)

Facade.Code
 1     //外观类
 2     class Facade
 3     {
 4         SubSystemOne one;
 5         SubSystemTwo two;
 6         SubSystemThree three;
 7         public Facade()
 8         {
 9             one = new SubSystemOne();
10             two = new SubSystemTwo();
11             three = new SubSystemThree();
12         }
13         public void FacadeMathodA()
14         {
15             Console.WriteLine("---方法组A()-----");
16             one.MethodOne();
17             two.MethodTwo();
18         }
19         public void FacadeMathodB()
20         {
21             Console.WriteLine("---方法组B()-----");
22             three.MethodThree();
23             two.MethodTwo();
24         }
25     }

用户调用:

Main.Invoker
1         static void Main(string[] args)
2         {
3             Facade facade = new Facade();
4             facade.FacadeMathodA();
5             facade.FacadeMathodB();
6 
7         }

对于面向对象有一定了解的朋友,即使没有听说过,也完全有可能在很多时候用到它,因为他完全体现了依赖倒转原则和迪米特法则的思想,所以是非常常用的模式。

何时使用外观模式:

可以分三个阶段来说,首先在设计初期阶段,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑数据访问和业务逻辑层、业务逻辑层和表现层之间建立外观Facade,就可以为负责的子系统提供简单的接口,使得耦合性大大降低。其次,在开发阶段,子系统因为不断的重构而变的越来月复杂,大多数模式都会产生许多小类,这本是好事,但也该外部调用它的用户带来了使用上的困难,增加外观模式,可以提供一个简单的接口,减少他们之间的依赖。第三,在维护阶段,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但是因为他有非常重要的功能,新功能开发必需依赖它,此时采用外观模式也非常适合,你可以为子系统开发一个Facade类,把遗留的设计粗糙,高度复杂的原有代码,提供一个简单的对外整合的接口,新系统与Facade交互,Facade来完成与复杂的遗留代码交互工作。

 

 

posted @ 2013-03-28 23:35  Lovey  阅读(172)  评论(0编辑  收藏  举报