Facade 外观模式

  • 外观模式:
    是软件工程中常用的一种软件设计模式,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。
    外观模式是为了解决类与类之间的依赖关系的,就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中一般不涉及到接口。

  • 示例类图:

  • 示例代码:

// SubSystem
public class CPU {public void on() {System.out.println("CPU on ...");}public void off() {System.out.println("CPU off ...");}
}
public class Memory {public void on() {System.out.println("Memory on ...");}public void off() {System.out.println("Memory off ...");}
}
public class Disk {public void on() {System.out.println("Disk on ...");}public void off() {System.out.println("Disk off ...");}
}// Facade
public class Computer {private CPU cpu = new CPU();private Memory memory = new Memory();private Disk disk = new Disk();public void startup() {cpu.on();memory.on();disk.on();System.out.println("Computer startup ...");}public void shutdown() {cpu.off();memory.off();disk.off();System.out.println("Computer shutdown ...");}
}
  • 抽象外观模式

    外观模式最大的缺点在于违背了“开闭原则”,
    当增加新的子系统或者移除子系统时需要修改外观类,可以通过引入抽象外观类在一定程度上解决该问题,客户端针对抽象外观类进行编程。
    对于新的业务需求,不修改原有外观类,而对应增加一个新的具体外观类,由新的具体外观类来关联新的子系统对象,
    同时通过修改配置文件来达到不修改源代码并更换外观类的目的。

  • 示例类图:

  • 示例代码:

// SubSystem
public class CPU {public void on() {System.out.println("CPU on ...");}public void off() {System.out.println("CPU off ...");}
}
public class Memory {public void on() {System.out.println("Memory on ...");}public void off() {System.out.println("Memory off ...");}
}
public class Disk {public void on() {System.out.println("Disk on ...");}public void off() {System.out.println("Disk off ...");}
}// Abstract Facade
public abstract class AbstractComputer {protected CPU cpu;protected Memory memory;protected Disk disk;public abstract void startup();public abstract void shutdown();
}
public class Lenovo extends AbstractComputer {public Lenovo() {this.cpu = new CPU();this.memory = new Memory();this.disk = new Disk();}@Overridepublic void startup() {cpu.on();memory.on();disk.on();System.out.println("Lenovo startup");}@Overridepublic void shutdown() {cpu.off();memory.off();disk.off();System.out.println("Lenovo shutdown");}
}
public class ASUS extends AbstractComputer {public ASUS() {this.cpu = new CPU();this.memory = new Memory();this.disk = new Disk();}@Overridepublic void startup() {cpu.on();memory.on();disk.on();System.out.println("ASUS startup");}@Overridepublic void shutdown() {cpu.off();memory.off();disk.off();System.out.println("ASUS shutdown");}
}

转载于:https://www.cnblogs.com/longshu/p/6818115.html

10.Facade-外观模式相关推荐

  1. 设计模式笔记 10.Facade 外观模式(结构型模式)

    10. Facade 外观模式      2008-8-18 动机(Motivation) 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种 ...

  2. 设计模式10: Facade 外观模式(结构型模式)

    Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...

  3. 设计模式学习之---Facade(外观)模式

    1.Facade外观模式,是一种接口型模式.这种模式的目的在于,它为子系统中的一组接口,定义了一个更高层次的接口,通过这个接口,提供一个统一的接口,使子系统更加容易使用. 2.实现:创建一个新的类,提 ...

  4. Facade外观模式

    Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战.在这里我想举一个例子: ...

  5. [php]php设计模式 Facade(外观模式)

    1 <?php 2 /** 3 * 外观模式 示例 4 * 5 * 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得这一子系统更加的容易使用 6 */ 7 class SubSyt ...

  6. C#设计模式系列 9 ----Facade外观模式之--天河城购物

    1.理论定义 外观模式   把  分散的子系统,集合成一个系统,提供一站式服务. 2.应用举例 需求描述: 聂小倩 和 宁采臣是一对小富则安 的聊斋夫妻.住在比较偏远的小乡村. 今天,两人初次来到大城 ...

  7. php5.1 facade,php设计模式 Facade(外观模式)

    模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加 ...

  8. 设计模式之Facade(外观)模式

    我们通过一个简单的开关电脑模拟程序来说明Facade模式(外观模式) CPU类 public class Cpu {  public void start()  {   system.out.prin ...

  9. Facade(外观模式) 结构型

    外观模式 一.概述 1.结构 2.适用场景 3.优缺点 4.区别 二.实例 一.概述 外观模式是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一接 ...

  10. 设计模式(10)——外观模式

    目录 传统方式解决影院管理 外观模式 外观模式解决影院管理 外观模式在MyBatis框架应用的源码分析 外观模式的注意事项和细节 案例说明:影院管理项目 组建一个家庭影院: DVD播放器.投影仪.自动 ...

最新文章

  1. 翻转二叉树 c语言实现 递归 栈 队列
  2. adreno-gpu-profiler
  3. 奥维导入的内容都不显示了_不懂内容运营?看看别人都是怎么打造爆款卖货文案的...
  4. (个人)Zookeeper集群环境部署
  5. 最萌办公室采访 | 网易程序员灵魂大拷问(文末有福利)
  6. 遇到了urlrewriter的:无法使用前导.. 在顶级目录上退出问题
  7. idea命令行运行多个客户端_推荐一款神仙颜值的 Redis 客户端工具,开源啦
  8. t4 tornado 模板
  9. 使用caffemodel模型(由mnist训练)测试单张手写数字样本
  10. Spring4.0编程式定时任务配置
  11. 2019百度之星程序设计大赛 1005 Seq
  12. xstream-0 使用入门
  13. python教学查询,python基础教程之查询集 QuerySet和管理器Manager
  14. visio双线方框怎么画_用VISIO怎样画出扇形
  15. 程序员如何更好的提升自己
  16. 如何编辑修改PDF,PDF怎么删除页眉页脚
  17. 删除Docbar中的添加内容功能
  18. 《漫步华尔街》 读书笔记 part1 历史
  19. wps表格户主序号_WPS表格怎么设置自动排列序号?
  20. 使用数字陷波器滤除工频信号

热门文章

  1. myeclipse8.6安装svn
  2. 顶级程序员的心得 Coders at Work (IV)
  3. 创建模块化程序(二)
  4. XmlReader and XmlWriter in .NET
  5. Java复制目录/子目录/文件
  6. js事件循环 microtask macrotask
  7. 调整数组顺序使奇数位于偶数的前面
  8. require和require_once的区别
  9. Ajax 完整教程(转载)
  10. 关于JVM结构的学习