4

【设计模式】Java设计模式 - 外观模式 - 怒放吧德德

 2 years ago
source link: https://www.cnblogs.com/lyd-code/p/16694723.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Java设计模式 - 外观模式

😄 不断学习才是王道
🔥 继续踏上学习之路,学之分享笔记
👊 总有一天我也能像各位大佬一样
🏆原创作品,更多关注我CSDN: 一个有梦有戏的人
👊准备将博客园、CSDN一起记录分享自己的学习心得!!!
🌝分享学习心得,欢迎指正,大家一起学习成长!

image

简介

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

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
                                                                                                                                                    ———— 菜鸟联盟

外观模式之理解

对于外观模式,我们可以理解为他是将一些复杂的接口或类进行隐藏,自己暴露出更为简单的操作方法,使得以我们不需要去对复杂方法的操作。就比如要完成一道工序,工序又有许多步骤,在不同情况要使用不同工序的方法,如果是传统的方式,一个一个调用,那么到一定量就会显得调用的复杂并且维护起来困难,因此可以使用外观模式,将一起使用的方法封装在一起,这样只需要调用这个外观的方法即可完成。
我们看一下外观模式的UML图:

image

实例

采用智能家居的例子来理解外观模式,例子很简单,当我们按下一键启动开关,就可以为我们打开/关闭窗户、电视、空调、灯光等。
先看一些类图:

请添加图片描述

具体代码如下:

1|0①、定义子系统

子系统分为:灯光、空调、电视、窗户。采用单例模式,并且声明开启、关闭的方法。
这里只粘贴一个,其他的代码类似。



package com.lyd.demo.subsystem; /** * @Author: lyd * @Description: 子系统 - 空调 * @Date: 2022-08-31 */ public class AirConditioner { private static AirConditioner airConditioner = new AirConditioner(); public static AirConditioner getAirConditioner() { return airConditioner; } public void on() { System.out.println("智能家居为您打开[空调]"); } public void off() { System.out.println("智能家居为您关闭[空调]"); } }

1|0②、外观类

采用单例模式,实例化对象,并且根据需要去调用方法,暴露出接口即可完成,这里是启动所有设备,还可以根据需要去选择。



package com.lyd.demo.faced; import com.lyd.demo.subsystem.AirConditioner; import com.lyd.demo.subsystem.Lights; import com.lyd.demo.subsystem.Tv; import com.lyd.demo.subsystem.Windows; /** * @Author: lyd * @Description: 外观模式 * @Date: 2022-08-31 */ public class SmartHomeFaced { private Lights[] lights = new Lights[4]; // 4盏灯 private Tv tv; private AirConditioner airConditioner; private Windows windows; public SmartHomeFaced() { this.lights[0] = Lights.getLights(); this.lights[1] = Lights.getLights(); this.lights[2] = Lights.getLights(); this.lights[3] = Lights.getLights(); this.tv = Tv.getTv(); this.airConditioner = AirConditioner.getAirConditioner(); this.windows = Windows.getWindows(); } public void openAll() { lights[0].on(0); lights[1].on(1); lights[2].on(2); lights[3].on(3); tv.on(); airConditioner.on(); windows.on(); } public void offAll() { lights[0].off(0); lights[1].off(1); lights[2].off(2); lights[3].off(3); tv.off(); airConditioner.off(); windows.off(); } }

1|0③、测试

调用外观暴露的接口方法就可以。



package com.lyd.demo.test;

import com.lyd.demo.faced.SmartHomeFaced;

/** * @Author: lyd * @Description: 测试 * @Date: 2022-08-31 */ public class FacedTest { public static void main(String[] args) { SmartHomeFaced smartHomeFaced = new SmartHomeFaced(); smartHomeFaced.openAll(); smartHomeFaced.offAll(); } }

运行结果:

image

好文推荐

今天的内容还算是简单好理解的,多看看,多动手理解就会更快!

👍创作不易,可能有些语言不是很通畅,如有错误请指正,感谢观看!记得一键三连哦!👍

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK