Java 设计模式系列(十)外观模式

门面模式(Facade):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。

一、外观模式结构

  • 门面(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。

  • 子系统(SubSystem)角色 :可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如上面的子系统就是由ModuleA、ModuleB三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。

源代码

(1) SubSystem

public class ModuleA {
//示意方法
public void testA(){
System.out.println("调用ModuleA中的testA方法");
}
} public class ModuleB {
//示意方法
public void testB(){
System.out.println("调用ModuleA中的testA方法");
}
}

(2) Facade

public class Facade {
//示意方法,满足客户端需要的功能
public void test(){
ModuleA a = new ModuleA();
a.testA();
ModuleB b = new ModuleB();
b.testB();
}
}

Facade 类其实相当于 A、B 模块的外观界面,有了这个 Facade 类,那么客户端就不需要亲自调用子系统中的 A、B 模块了,也不需要知道系统内部的实现细节,甚至都不需要知道 A、B 模块的存在,客户端只需要跟 Facade 类交互就好了,从而更好地实现了客户端和子系统中 A、B 模块的解耦,让客户端更容易地使用系统。

二、总结

门面模式的优点:

  • 松散耦合

    门面模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护。

  • 简单易用

  门面模式让子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要跟众多子系统内部的模块进行交互,只需要跟门面类交互就可以了。

  • 更好的划分访问层次

  通过合理使用Facade,可以帮助我们更好地划分访问的层次。有些方法是对系统外的,有些方法是系统内部使用的。把需要暴露给外部的功能集中到门面中,这样既方便客户端使用,也很好地隐藏了内部的细节。


每天用心记录一点点。内容也许不重要,但习惯很重要!

最新文章

  1. C 标准库系列之概述
  2. [WCF编程]12.事务:服务事务编程(下)
  3. Eclipse Building Workspace 解决办法
  4. 鸟哥的linux私房菜之磁盘与文件系统管理
  5. 1.scala语法
  6. Visual Studio 2015安装过程卡住,解决办法
  7. GCC的编译和安装 很好的资料
  8. 获取客户端IPAsp.Net
  9. 使用JDBC处理数据库大容量数据类型
  10. 控制台程序的参数解析类库 CommandLine
  11. Greenplum——大数据时代高性能的数据仓库与BI应用平台
  12. Lintcode247 Segment Tree Query II solution 题解
  13. ArrayList源码学习----JDK1.7
  14. python之路——博客目录
  15. HTTPS过程以及详细案例
  16. ASP.NET Core如何使用WSFederation身份认证集成ADFS
  17. 解决:fatal: authentication failed for https
  18. 巧用border特性实现聊天气泡效果
  19. MongoDB学习之(二)java连接
  20. 《selenium2 python 自动化测试实战》(16)——js操作补充

热门文章

  1. 归并排序(C语言)
  2. [LeetCode系列] 跳跃问题II
  3. 深入理解java虚拟机,并发方面
  4. linux上安装Qt4.8.6+QtCreator4.0.3
  5. Map和Bean的相互转换
  6. CentOS 6.7 编译PHP7 make时出现错误:undefined reference to `libiconv_close’
  7. Mysql总结(一)
  8. ASP.NET中的几种弹出框提示基本实现方法
  9. php执行linux函数
  10. 关于std:auto_ptr std:shared_ptr std:unique_ptr