文章目录

  • 引例
  • 一般解法
  • 外观模式
  • 外观模式解法
  • 总结

引例


现在需要组建一个家庭影院,包含设备投影仪、自动屏幕、播放器和音响等。其过程包括放下屏幕、开投影仪、开音响、开播放器,观影结束后,关闭各种设备。

一般解法


客户端直接使用各个子系统来完成操作:

存在问题
客户端在主函数钟创建各个子系统的对并直接使用其相关方法,造成调用过程混乱,没有清晰的统一过程,也不利于维护子系统的操作。

解决思路
定义一个接口界面类,提供一个一致的界面(如提供四个方法ready、play、pause、end)来操作访问各子系统,屏蔽掉子系统的内部细节,使得客户端调用只需要更这个接口发生交互,而无需关心它的内部实现,即=》外观模式。

外观模式


外观模式(Facade Pattern)也称为过程模式,是结构性模式。外观模式为子系统的一组接口提供了一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式可以理解为转换一群接口,客户只要调用这一个接口而不用调用多个接口才能达到目的,也不需关心这个子系统的内部细节。就是解决多个复杂接口带来的使用困难,起到简化用户操作的作用。

类图

  • Facade外观类:提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给相应子系统对象。
  • System子系统:处理Facade对象指派的任务,是功能的实际提供者。
  • Client客户端:外观接口调用测试者。

外观模式解法


类图

代码

  1. 各子系统
public class Player { //播放器private static Player instance = new Player();//使用单例模式(饿汉式)public static Player getInstanc() {return instance;}public void on() {System.out.println(" 播放器打开了 ");}public void off() {System.out.println(" 播放器关闭了 ");}public void play() {System.out.println(" 播放器播放中 ");}public void pause() {System.out.println(" 播放暂停 ");}
}public class Screen { //屏幕private static Screen instance = new Screen();public static Screen getInstance() {return instance;}public void up() {System.out.println(" 屏幕上升 ");}public void down() {System.out.println(" 屏幕下降 ");}
}public class Stereo { //音响private static Stereo instance = new Stereo();public static Stereo getInstance() {return instance;}public void on() {System.out.println(" 音响打开了 ");}public void off() {System.out.println(" 音响关闭了 ");}public void setVolume() {System.out.println(" 音响音量调节 ");}
}public class Projector { //投影仪private static Projector instance = new Projector();public static Projector getInstance() {return instance;}public void on() {System.out.println(" 投影仪打开了 ");}public void off() {System.out.println(" 投影仪关闭了 ");}public void focus() {System.out.println(" 投影仪聚焦 ");}public void zoom() {System.out.println(" 投影仪放大 ");}
}

(插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

  1. 外观类
public class HomeTheaterFacade { //外观类//定义各个子系统对象private Player player;private Screen screen;private Stereo stereo;private Projector projector;//构造器public HomeTheaterFacade() {this.player = Player.getInstance();this.screen = Screen.getInstance();this.stereo = Stereo.getInstance();this.projector = Projector.getInstance();}//一致界面public void ready() {System.out.println("===ready===");screen.down();player.on();stereo.on();stereo.setVolume();projector.on();projector.zoom();projector.focus();}public void play() {System.out.println("===play===");player.play();}public void pause() {System.out.println("===pause===");player.pause();}public void end() {System.out.println("===end===");screen.up();projector.off();stereo.off();player.off();}
}
  1. 客户端
public class Client {public static void main(String[] args) {HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();homeTheaterFacade.ready();homeTheaterFacade.play();homeTheaterFacade.pause();homeTheaterFacade.end();}
}

运行结果

总结


  • 外观模式对客户端与子系统的耦合关系,让子系统内部的模块更易维护和扩展。
  • 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复
    杂性。
  • 当系统需要进行分层设计时,可以考虑外观模式帮我们更好的划分访问的层次。
  • 不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。
    要以让系统有层次,利于维护为目的。
  • 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时
    可以考虑为新系统开发一个Facade类,来提供遗留系统的比较清晰简单的接口,让新系统与Facade类交互,提高复用性。

原创不易,请勿转载(本不富裕的访问量雪上加霜 )
博主首页:https://wzlodq.blog.csdn.net/
微信公众号:吾仄lo咚锵
如果文章对你有帮助,记得一键三连❤

设计模式-外观模式(家庭影院你值得拥有)相关推荐

  1. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

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

    设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...

  3. Java设计模式——外观模式【Facade Pattern】

    一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...

  4. [设计模式]外观模式

    1. 定义 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更加容易使用. 外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可 ...

  5. Java设计模式---外观模式

    外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...

  6. Java 设计模式——外观模式

    概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...

  7. Java设计模式-外观模式

    我又来了,继Java设计模式之桥接模式后,现在来到了外观模式啦,外观模式又称为门面模式啦

  8. 大话设计模式—外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  9. Java常用设计模式————外观模式

    引言 外观模式(Facade Pattern),又叫"过程模式".外观模式为子系统中的一组接口提供一个一致的入口,此模式定义了一个高层接口,这个接口使得这一组子系统更加易用. 一. ...

  10. 设计模式 外观模式 一键电影模式

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...

最新文章

  1. jQuery EasyUI DataGrid - 格式化列(formatter )
  2. 制作五彩纸屑转场动效_何时以及如何将五彩纸屑添加到产品UI
  3. 【java基础知识】设置表格内容居中显示,表格字体大小调整,表格列宽调整
  4. php 字符串过滤指定字符,php字符串过滤与替换小结
  5. Julia: SQLite库升级后的操作
  6. ai/ml_您应该在本周(7月18日)阅读有趣的AI / ML文章
  7. 后台UI框架bootstrap、JQuery——Hplus-v.4.1.0
  8. Appium使用教程_Android篇
  9. ssh 远程连接详解--(linux运维09)
  10. 19-备忘录模式Quarkus实现
  11. 小程序更新数组操作push、pop、unshift、shift
  12. 十月英语——坚持的力量
  13. 基于Android开发的手持扫码枪APP(附带参考源码)
  14. 动态网页和静态网页之间的区别?
  15. 计算机毕业设计django基于python的汽车租赁系统
  16. UiPath系统框架
  17. 1.hybird、VLAN基本概念
  18. 基于java+SSM+jsp框架的房屋租赁管理系统的设计和实现(附源码)
  19. JS识别二维码,JS解二维码,前端识别二维码
  20. GD(梯度下降)和SGD(随机梯度下降)

热门文章

  1. 2020-12-28
  2. android 9指纹认证_Android指纹认证教程
  3. 如何使用kettle将EXCEL导入数据库
  4. 用代理IP上网安全吗?
  5. 网站发布的文章如何快速被收录?
  6. 【oracle报错】/usr/bin/ksh conflicts between attempted installs of pdksh-5.2.14-30.x86_64
  7. 〖Python自动化办公篇㉑〗- python实现邮件自动化 - 定时发送邮件
  8. Labelme转VOC格式
  9. Python发送QQ邮件常见报错和代码
  10. 学生信息管理系统可行性研究报告