• 【设计模式】Java设计模式 - 外观模式


    🚀 优质资源分享 🚀

    学习路线指引(点击解锁)知识定位人群定位
    🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
    💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

    1|0Java设计模式 - 外观模式

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

    image

    目录* Java设计模式 - 外观模式
    + 简介
    + 外观模式之理解
    + 实例
    - ①、定义子系统
    - ②、外观类
    - ③、测试
    + 好文推荐

    1|1简介

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

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

    1|2外观模式之理解

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

    1|3实例

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

    具体代码如下:

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    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();
     }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行结果:
    image

    1|4好文推荐

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

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

    __EOF__

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0mfrtHWv-1663216788224)(https://blog.csdn.net/lyd-code/p/16694723.html)]怒放吧德德 本文链接:https://blog.csdn.net/lyd-code/p/16694723.html关于博主:评论和私信会在第一时间回复。或者直接私信我。版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!声援博主:如果您觉得文章对您有帮助,可以点击文章右下角**【[推荐](javascript:void(0)😉】**一下。您的鼓励是博主的最大动力!

  • 相关阅读:
    高并发、高性能、高可用的理解及处理方式
    报名开启 | 共赏云原生数字新乐章
    Llama 2: 深入探讨ChatGPT的开源挑战者
    11.10
    数码品牌这样做,教你实现用户增长
    集合并集交集差集【工具类】
    java计算机毕业设计慧学IT精品课程网站源码+mysql数据库+系统+lw文档+部署
    vue实现列表自动无缝滚动列表
    按权值建树,平面几何
    C#中的方法
  • 原文地址:https://blog.csdn.net/u012804784/article/details/126868993