Chinaunix首页 | 论坛 | 博客
  • 博客访问: 459613
  • 博文数量: 62
  • 博客积分: 1312
  • 博客等级: 中尉
  • 技术积分: 1555
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 18:10
文章分类

全部博文(62)

文章存档

2014年(1)

2013年(5)

2012年(56)

分类: C#/.net

2013-04-14 11:24:35

定义:
    为子系统中的一组接口提供一个统一的界面,这个模式定义一个高层的接口,从而使得子系统更加容易使用。

外观模式结构图:


外观模式示例代码:

点击(此处)折叠或打开

  1. public class SubSystem1
  2.     {
  3.         public void Method1()
  4.         {
  5.             Console.WriteLine("This is class 1");
  6.         }
  7.     }

  8.     public class SubSystem2
  9.     {
  10.         public void Method2()
  11.         {
  12.             Console.WriteLine("This is class 2");
  13.         }
  14.     }

  15.     public class SubSystem3
  16.     {
  17.         public void Method3()
  18.         {
  19.             Console.WriteLine("This is class 3");
  20.         }
  21.     }

  22.     public class SubSystem4
  23.     {
  24.         public void Method4()
  25.         {
  26.             Console.WriteLine("This is class 4");
  27.         }
  28.     }

  29.     public class Facada
  30.     {
  31.         private readonly SubSystem1 _subSystem1;
  32.         private readonly SubSystem2 _subSystem2;
  33.         private readonly SubSystem3 _subSystem3;
  34.         private readonly SubSystem4 _subSystem4;

  35.         public Facada()
  36.         {
  37.             _subSystem1 = new SubSystem1();
  38.             _subSystem2 = new SubSystem2();
  39.             _subSystem3 = new SubSystem3();
  40.             _subSystem4 = new SubSystem4();
  41.         }

  42.         public void MethodA()
  43.         {
  44.             Console.WriteLine("Method group A:");
  45.             _subSystem1.Method1();
  46.             _subSystem2.Method2();
  47.         }

  48.         public void MethodB()
  49.         {
  50.             Console.WriteLine("Method groupB:");
  51.             _subSystem3.Method3();
  52.             _subSystem4.Method4();
  53.         }
  54.     }
客户端代码:

点击(此处)折叠或打开

  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Facada facada = new Facada();
  6.             facada.MethodA();
  7.             facada.MethodB();
  8.         }
  9.     }

外观模式的使用场合:
    1: 在设计初期,要有意识地将各个层分开。在经典的三层架构中,各个层之间要有方便访问的Facada
    2: 在开发阶段,子系统由于重构而变得越来越复杂。会产生比较多的小类,这对于调用来说是很不方便的,通过外观Facada提供一个简单的调用接口,减少各个类之间的依赖。
    3: 在维护一个遗留的大系统时,这个类以及很难维护和扩展了。为新系统开发一个Facada,让Facada与遗留的代码交互。
阅读(2114) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~