设计模式 之 创建型模式 <五> 外观模式(Facade Pattern ) --深入浅出
角色:
(1) Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个 或者多个)子系统的功能和责任;
在正常情况下,它将所有从客户端发来的请求委派到相应 的子系统去,传递给相应的子系统对象处理。
(2) SubSystem(子系统角色):在软件系统中可以有一个或者多个子系统角色,每一个子系统 可以不是一个单独的类,而是一个类的集合,它实现子系统的功能;
每一个子系统都可以被 客户端直接调用,或者被外观角色调用,它处理由外观类传过来的请求;子系统并不知道外 观的存在,对于子系统而言,外观角色仅仅是另外一个客户端而已。
1 2 class SubSystemA { 3 4 public void MethodA() { //业务实现代码 } 5 6 } 7 8 class SubSystemB { 9 10 public void MethodB() { //业务实现代码 } 11 12 } 13 14 class SubSystemC { 15 16 public void MethodC() { //业务实现代码 } 17 18 } 19 20 21 //在引入外观类之后,与子系统业务类之间的交互统一由外观类来完成,在外观类中通常存在 如下代码: 22 23 24 class Facade { 25 26 private SubSystemA obj1 = new SubSystemA(); 27 private SubSystemB obj2 = new SubSystemB(); 28 private SubSystemC obj3 = new SubSystemC(); 29 30 public void Method() { 31 obj1.MethodA(); 32 obj2.MethodB(); 33 obj3.MethodC(); 34 } 35 } 36 37 // 由于在外观类中维持了对子系统对象的引用,客户端可以通过外观类来间接调用子系统对象 的业务方法,而无须与子系统对象直接交互。引入外观类后,客户端代码变得非常简单,典型代码如下: 38 39 class Program { 40 41 static void Main(string[] args) { 42 Facade facade = new Facade(); 43 facade.Method(); 44 } 45 }