设计模式学习笔记——门面模式

原文:http://blog.csdn.net/hackerain/article/details/7561448

定义:

要求一个子系统的外部和其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用

统一的对象”,也就是提供一个访问子系统的接口,除了这个接口,不允许有任何访问子系统的行为发生,门面对象是外界访问子系统的唯一通道,不管子系统内部是多么杂乱无章,只要有门面模式在,就可以做到“金玉其外,败絮其中”。


其通用类图如下:



举一个简单的模拟的例子:

[java]  view plain copy
  1. public class ClassA {  
  2.     public void doSomethingA(){  
  3.         System.out.println("A.....");  
  4.     }  
  5. }  
  6.   
  7. public class ClassB {  
  8.       
  9.     public void doSomethingB(){  
  10.         System.out.println("B.....");  
  11.     }  
  12.       
  13. }  
  14.   
  15. public class ClassC {  
  16.     public void doSomethingC(){  
  17.         System.out.println("C.....");  
  18.     }  
  19. }  
  20.   
  21. /* 
  22.  * 门面模式,外部要访问子系统内部的方法,要通过门面对象 
  23.  */  
  24. public class Facade {  
  25.       
  26.     private ClassA A=new ClassA();  
  27.     private ClassB B=new ClassB();  
  28.     private ClassC C=new ClassC();  
  29.       
  30.     public void methodA(){  
  31.         this.A.doSomethingA();  
  32.     }  
  33.       
  34.     public void methodB(){  
  35.         this.B.doSomethingB();  
  36.     }  
  37.       
  38.     public void methodC(){  
  39.         this.C.doSomethingC();  
  40.     }  
  41. }  

其实一个子系统可以有多个门面,并且当有受限的外部对象要访问子系统时,尤其要根据不同对象的权限设计不同的门面对象,如下面的第二个门面对象:

[java]  view plain copy
  1. /* 
  2.  * 新增的门面对象,这里只提供了对methodB()方法的访问权限, 
  3.  * 而且是委托给了已经存在的门面对象facade进行处理,这样做 
  4.  * 是为了不重复写相同的代码,避免以后到处修改相同代码的悲剧 
  5.  */  
  6. public class Facade2 {  
  7.       
  8.     private Facade facade=new Facade();  
  9.       
  10.     public void methodB(){  
  11.         this.facade.methodB();  
  12.     }  
  13. }  


另外需要注意的一点是,门面模式是不应该参与子系统内的业务逻辑,它只是提供了一个访问子系统的路径而已,所以所有的业务逻辑应该在子系统内部进行解决,提供给门面对象的总是对外的接口。


门面模式的优点:

1、减少了系统的相互依赖,避免了外界直接访问子系统内部,造成强耦合的关系。

2、提高了安全性


门面模式的缺点:

最大的缺点就是不符合开闭原则,当子系统有了小问题需要修改涉及到了门面对象,那么门面对象只有直接修改代码。


门面模式的使用场景还有必要说一下:

1、为一个复杂的模块或子系统提供一个供外界访问的接口

2、子系统相对独立,外界对子系统的访问只需要黑箱操作即可

3、预防低水平人员带来的风险扩散


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值