一、什么是外观模式

  所谓外观模式就是要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行交互。外观模式提供一个高层次的接口使得子系统更易于使用。

二、外观模式具有的角色

客户端可以调用这个角色的方法。该角色知晓相关的子系统的功能和责任。

可以同时有一个或者多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端直接调用,或者被外观角色调用。

 三、类图

外观(Facade)模式_设计模式

四、代码类


1. class  Package1
2. {
3. public void MethodA()
4. {
5. //业务实现代码
6. }
7. }
8.
9. class Package2
10. {
11. public void MethodB()
12. {
13. //业务实现代码
14. }
15. }
16.
17. class Package3
18. {
19. public void MethodC()
20. {
21. //业务实现代码
22. }
23. }


1. class Facade  
2. {
3. privatePackage1 obj1 = newPackage1();
4. privatePackage2 obj2 = newPackage2();
5. privatePackage3 obj3 = newPackage3();
6.
7. public void Method()
8. {
9. obj1.MethodA();
10. obj2.MethodB();
11. obj3.MethodC();
12. }
13. }

客户端代码:

     


1. class Program  
2. {
3. static void Main(string[] args)
4. {
5. new Facade();
6. facade.Method();
7. }
8. }

五、优点

   (1)实现了子系统与客户端之间的松耦合关系。
   (2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

六、使用场景

(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。
(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。
(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。