博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-外观模式(facade)
阅读量:4060 次
发布时间:2019-05-25

本文共 1927 字,大约阅读时间需要 6 分钟。

基本概念

外观模式的作用:

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

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

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

外观模式的角色:

  • SubSystem,子系统角色。表示一个系统的子系统或模块。

  • Facade,外观角色,客户端通过操作外观角色从而达到控制子系统角色的目的。对于客户端来说,外观角色好比一道屏障,对客户端屏蔽了子系统的具体实现。

实例探究

假设一台电脑,它包含了 CPU(处理器),Memory(内存) ,Disk(硬盘)这几个部件,若想要启动电脑,则先后必须启动 CPU、Memory、Disk。关闭也是如此。

但是实际上我们在电脑开/关机时根本不需要去操作这些组件,因为电脑已经帮我们都处理好了,并隐藏了这些东西。

这些组件好比子系统角色,而电脑就是一个外观角色。

  • SubSystem,子系统角色。
public class CPU {
public void startup(){
System.out.println("cpu startup!"); } public void shutdown(){
System.out.println("cpu shutdown!"); } }public class Memory {
public void startup(){
System.out.println("memory startup!"); } public void shutdown(){
System.out.println("memory shutdown!"); } } public class Disk {
public void startup(){
System.out.println("disk startup!"); } public void shutdown(){
System.out.println("disk shutdown!"); } }
  • Facade,外观角色。
public class Computer {
private CPU cpu; private Memory memory; private Disk disk; public Computer(){
cpu = new CPU(); memory = new Memory(); disk = new Disk(); } public void startup(){
System.out.println("start the computer!"); cpu.startup(); memory.startup(); disk.startup(); System.out.println("start computer finished!"); } public void shutdown(){
System.out.println("begin to close the computer!"); cpu.shutdown(); memory.shutdown(); disk.shutdown(); System.out.println("computer closed!"); } }

具体调用如下:

Computer computer = new Computer();  computer.startup();  computer.shutdown();

转载自:

参考

你可能感兴趣的文章
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>