外观模式(Facade)----设计模式

文章目录

  • 外观模式(Facade)----设计模式
    • 什么是外观模式呢?
    • 外观模式的基本介绍
    • 制造一个影院管理?
    • 实现代码
    • 总结

什么是外观模式呢?

以我们中常见的案例说明,当我们需要安装win10电脑系统时,不需要了解安装系统的每一部分细节,交给固定程序进行安装即可;当我们去医院看病时,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便;等等…

外观模式就是将事件内部具体的细节封装起来,使使用者能够更加方便地完成需求。

即通过定义一个一致的接口(界面类),用以屏蔽内部子系统的细节,使得调用端只需要跟这个接口发生调用,而无需关心这个子系统的内部细节。

外观模式的基本介绍

制造一个影院管理?

假如现在要制作一个影院管理项目,如果我们要求完成使用家庭影院的功能,一个个调用使用这些方法实在过于繁琐,结构混乱。

通常情况下,电影院只会提供电影播放的准备工作、开始播放、暂停播放、结束播放的工作,此时我们就可以使用外观模式实现这一效果。

实现代码

爆米花类

package com.design_patterns.facade;/*** 定义爆米花机器类*/
public class PopCorn {private static PopCorn instance = new PopCorn();private PopCorn(){};public static PopCorn getInstance(){return instance;}public void on(){System.out.println(" popcorn on ");}public void off(){System.out.println(" popcorn off ");}public void pop(){System.out.println(" popcorn pop ");}
}

DVD播放器类

package com.design_patterns.facade;/*** 定义DVDPlayer播放类*/
public class DVDPlayer {//使用单例模式(饿汉式)private static DVDPlayer instance = new DVDPlayer();//构造方法私有化private DVDPlayer(){};//获取单例模式对象public static DVDPlayer getInstance(){return instance;}public void on(){System.out.println(" dvd on ");}public void off(){System.out.println(" dvd off ");}public void play(){System.out.println(" dvd is playing ");}public void pause(){System.out.println(" dvd pause ");}
}

放映机类

package com.design_patterns.facade;/*** 定义放映机类*/
public class Projector {private static Projector instance = new Projector();private Projector(){};public static Projector getInstance(){return instance;}public void on(){System.out.println(" Projector on ");}public void off(){System.out.println(" Projector off ");}public void focus(){System.out.println(" Projector focus ");}}

屏幕类(荧屏)

package com.design_patterns.facade;/*** 定义屏幕*/
public class Screen {//使用单例模式(饿汉式)private static Screen instance = new Screen();//构造方法私有化private Screen(){};//获取单例模式对象public static Screen getInstance(){return instance;}public void up(){System.out.println(" screen up ");}public void down(){System.out.println(" screen down ");}}

音响类

package com.design_patterns.facade;/*** 定义音箱,输出影片声音*/
public class Stereo {//使用单例模式(饿汉式)private static Stereo instance = new Stereo();//构造方法私有化private Stereo(){};//获取单例模式对象public static Stereo getInstance(){return instance;}public void on(){System.out.println(" stereo on ");}public void off(){System.out.println(" stereo off ");}public void up(){System.out.println(" stereo up ");}public void down(){System.out.println(" stereo down ");}
}

影院灯光类

package com.design_patterns.facade;/*** 定义电影院内的灯光类*/
public class TheaterLight {//使用单例模式(饿汉式)private static TheaterLight instance = new TheaterLight();//构造方法私有化private TheaterLight(){};//获取单例模式对象public static TheaterLight getInstance(){return instance;}public void on(){System.out.println(" TheaterLight on ");}public void off(){System.out.println(" TheaterLight off ");}public void bright(){System.out.println(" TheaterLight bright ");}public void dim() {System.out.println(" TheaterLight dim ");}
}

电影院类,即外观模式的实现

package com.design_patterns.facade;/*** 定义电影院类,通过方法封装各个子部分的实现细节*/
public class HomeTheaterFacade {//定义各个子系统的对象private DVDPlayer dvdPlayer;private PopCorn popCorn;private Projector projector;private Screen screen;private Stereo stereo;private TheaterLight theaterLight;//通过构造方法为电影院各个子系统部分获取实例化对象public HomeTheaterFacade(){this.dvdPlayer = DVDPlayer.getInstance();this.popCorn = PopCorn.getInstance();this.projector = Projector.getInstance();this.screen = Screen.getInstance();this.stereo = Stereo.getInstance();this.theaterLight = TheaterLight.getInstance();}//操作分为 4 步/*** 进行准备工作*/public void ready(){System.out.println("----- 电影院准备放映影片 -----");popCorn.on();popCorn.pop();screen.down();projector.on();stereo.on();dvdPlayer.on();theaterLight.dim();}/*** 电影院开始放电影工作*/public void play(){System.out.println("----- 电影院开始放映影片 -----");dvdPlayer.play();}/*** 电影院进行暂停工作*/public void pause(){System.out.println("----- 电影院暂停放映影片 -----");dvdPlayer.pause();}/*** 电影院电影放映结束动作*/public void end(){System.out.println("----- 电影院结束放映影片 -----");popCorn.off();theaterLight.bright();screen.up();projector.off();stereo.off();dvdPlayer.off();}
}

客户端(测试)类

package com.design_patterns.facade;public class Client {public static void main(String[] args) {HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();homeTheaterFacade.ready();      //电影院准备工作homeTheaterFacade.play();       //电影院开始放电影homeTheaterFacade.pause();      //电影院暂停放电影homeTheaterFacade.end();        //电影院结束影片放映}
}

运行结果

----- 电影院准备放映影片 -----popcorn on popcorn pop screen down Projector on stereo on dvd on TheaterLight dim
----- 电影院开始放映影片 -----dvd is playing
----- 电影院暂停放映影片 -----dvd pause
----- 电影院结束放映影片 -----popcorn off TheaterLight bright screen up Projector off stereo off dvd off 

总结

嘻嘻,感觉外观模式非常容易理解,本质就是将事件的实现细节通过一个一致界面进行封装,最后调用封装实现功能即可,好啦,就到这里,加油~~~

外观模式(Facade)----设计模式相关推荐

  1. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  2. 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  3. 研磨设计模式之外观模式(Facade)(解决方案)

    3.2  解决方案 3.2.1  外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...

  4. php facade模,PHP 设计模式之外观模式 Facade

    简单描述 外观模式(Facade pattern),为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用. 外观模式又称为门面模式,它是一种对象结构型模式,遵循迪米特法则,又称最少知道原则 ...

  5. 设计模式:外观模式(Facade)

    外观模式(Facade)也叫过程模式, 外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式通过定义一个一致的接口,用以屏蔽内部子系 ...

  6. 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用

    文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...

  7. 外观模式(Facade) - 为系统分层次

    程序面试时经常会碰到系统分层的问题.  要你描述怎样分层, 分层的好处等. 而Java 有个外观模式(facade) 正能帮组我们对系统分层次. 一, 外观模式(Facade) 的定义 所谓外观模式, ...

  8. 使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  9. php 外观模式,PHP设计模式 外观设计模式

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

最新文章

  1. Update of SharePoint Me
  2. python 调用c++返回char*
  3. 主要推荐系统算法总结及Youtube深度学习推荐算法实例概括
  4. Spring的核心机制依赖注入,Junit测试与Java基础Getter和Setter两种方法意义——2017.07.26...
  5. 迪士尼正式收购21世纪福克斯!网友:原来米老鼠才是灭霸…
  6. 使用FileDialog查看文件内容
  7. android之camera2获取数据
  8. ICCV 2021 best paper-Swin Transformer:对各类SOTA的降维打击!
  9. 后台扫描与备份文件泄露(御剑+dirsearch使用)
  10. 机器学习专业名词中英文对照
  11. 计算机网络按拓扑结构可以划分为,计算机网络按拓扑结构分为哪些
  12. 3.4亿!史上最贵二踢脚,马斯克“自炸”火箭:SpaceX成功测试飞船逃生能力
  13. c语言正确标识符怎么判断,判断C语言的标识符是否正确
  14. 人物回眸效果怎么用Vegas设置
  15. B. Catching Cheaters(cf)dp
  16. 牺牲一个存储空间的循环队列实现方法
  17. matlab牛顿法解非线性方程组,matlab实现牛顿迭代法求解非线性方程组.pdf
  18. Java代码审计(5)JavaEE介绍
  19. HTML转义字符、Javascript转义字符、HTML特殊字符对照表
  20. Intel汇编-JMP无条件调转

热门文章

  1. SQLSERVER 多表联合查询(join)
  2. 微信小程序微信账号登录
  3. Cryptography,一个C#写的加解密算法的类
  4. 使用Beef劫持客户端浏览器并进一步使用Beef+msf拿客户端shell
  5. [硬件项目] 2、汽车倒车雷达设计——基于专用倒车雷达芯片GM3101的设计方案与采用CX20106A红外线检测芯片方案对比...
  6. harmonyos下载安装,harmonyos系统下载_harmonyos系统安装 v2.0_零度软件园
  7. 网络基础知识--IP地址
  8. python 实现跳一跳自动化代码_跳一跳AI(wai gua)的实现原理详细介绍
  9. 谷歌文本转语音(gtts)批量转换
  10. 暑假阅读的正确打开方式原来这么简单!