设计模式--12.外观模式

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


模式实现

      外观模式的主要目的在于降低系统的复杂程度,在面向对象软件系统中,类与类之间的关系越多,不能表示系统设计得越好,反而表示系统中类之间的耦合度太大,这样的系统在维护和修改时都缺乏灵活性,因为一个类的改动会导致多个类发生变化,而外观模式的引入在很大程度上降低了类与类之间的耦合关系。引入外观模式之后,增加新的子系统或者移除子系统都非常方便,客户类无须进行修改(或者极少的修改),只需要在外观类中增加或移除对子系统的引用即可。从这一点来说,外观模式在一定程度上并不符合开闭原则,增加新的子系统需要对原有系统进行一定的修改,虽然这个修改工作量不大。

      外观模式中所指的子系统是一个广义的概念,它可以是一个类、一个功能模块、系统的一个组成部分或者一个完整的系统。子系统类通常是一些业务类,实现了一些具体的、独立的业务功能,其典型代码如下:

[csharp]  view plain  copy
  1. class SubSystemA  
  2. {  
  3.     public void MethodA()  
  4.     {  
  5.         //业务实现代码  
  6.     }  
  7. }  
  8.   
  9. class SubSystemB  
  10. {  
  11.     public void MethodB()  
  12.     {  
  13.         //业务实现代码  
  14.      }  
  15. }  
  16.   
  17. class SubSystemC  
  18. {  
  19.     public void MethodC()  
  20.     {  
  21.         //业务实现代码  
  22.     }  
  23. }  


      在引入外观类之后,与子系统业务类之间的交互统一由外观类来完成,在外观类中通常存在如下代码:

[csharp]  view plain  copy
  1. class Facade  
  2. {  
  3.     private SubSystemA obj1 = new SubSystemA();  
  4.     private SubSystemB obj2 = new SubSystemB();  
  5.     private SubSystemC obj3 = new SubSystemC();  
  6.   
  7.     public void Method()  
  8.     {  
  9.         obj1.MethodA();  
  10.         obj2.MethodB();  
  11.         obj3.MethodC();  
  12.     }  
  13. }  


      由于在外观类中维持了对子系统对象的引用,客户端可以通过外观类来间接调用子系统对象的业务方法,而无须与子系统对象直接交互。引入外观类后,客户端代码变得非常简单,典型代码如下:

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值