设计模式之外观模式笔记

news2024/12/24 20:54:56

设计模式之外观模式笔记

  • 说明
  • Facade(外观)
  • 目录
  • 外观模式示例类图
    • 电灯类
    • 电视机类
    • 空调类
    • 智能音箱外观类
    • 测试类

说明

记录下学习设计模式-外观模式的写法。JDK使用版本为1.8版本。

Facade(外观)

意图:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
结构:
在这里插入图片描述

其中:

  • Facade知道哪些子系统类负责处理请求;将客户的请求代理给适合的子系统对象。
  • Subsystem classes实现子系统的功能;处理有Facade对象指派的任务;没有Facade的任何相关信息,即没有指向Facade的指针。

适用性:

  • 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
  • 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
  • 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。

目录

在这里插入图片描述

外观模式示例类图

在这里插入图片描述
以该UML类图实现外观模式示例。

电灯类

package com.example.deesign_patterns.facade;

//电灯类
public class Light {

    //开灯
    public void on(){
        System.out.println("打开电灯。。。");
    }

    //关灯
    public void off(){
        System.out.println("关闭电灯。。。");
    }
}

电视机类

package com.example.deesign_patterns.facade;

//电视机类
public class TV {

    //开电视机
    public void on(){
        System.out.println("打开电视机。。。");
    }

    //关电视机
    public void off(){
        System.out.println("关闭电视机。。。");
    }
}

空调类

package com.example.deesign_patterns.facade;

//空调类
public class AirCondition {

    //开空调
    public void on(){
        System.out.println("打开空调。。。");
    }

    //关空调
    public void off(){
        System.out.println("关闭空调。。。");
    }
}

智能音箱外观类

package com.example.deesign_patterns.facade;

//智能音箱外观类,用户主要和该类对象进行交互
public class SmartAppliancesFacade {

    //聚合电灯对象、电视机对象、空调对象
    private Light light;
    private TV tv;
    private AirCondition airCondition;

    public SmartAppliancesFacade() {
        light=new Light();
        tv=new TV();
        airCondition=new AirCondition();
    }

    //语音控制方法
    public void say(String message){
        if(message.contains("打开")){
            on();
        }else if(message.contains("关闭")){
            off();
        }else {
            System.out.println("我还听不懂你说的!!!");
        }
    }

    //一键打开功能
    private void on(){
        light.on();
        tv.on();
        airCondition.on();
    }

    //一键关闭功能
    private void off(){
        light.off();
        tv.off();
        airCondition.off();
    }
}

测试类

package com.example.deesign_patterns.facade;

//测试类
public class Client {

    public static void main(String[] args) {
        //创建智能音箱对象
        SmartAppliancesFacade facade=new SmartAppliancesFacade();
        //控制家电
        facade.say("打开家电");
        System.out.println("===============");
        facade.say("关闭家电");
    }
}

在这里插入图片描述

好处:

  • 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
  • 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。

缺点:
不符合开闭原则,修改起来很麻烦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2023,学点儿新Java-23】初步了解Java中的修饰符:static及其作用、native特性、final的理解

前情回顾: 【2023,学点儿新Java-22】Java中package的作用是什么 | Java中import的用法 | Java中的权限修饰符:private、protected、public【2023,学点儿新Java-21】Java中default的语法格式 | 父类私有的方法能被重写吗&#xff…

三分钟学习一个python小知识3-----------我的对python的列表和元组的理解

我的目录 1、python是什么2、列表的应用3. 元组的应用:4、深层次地进一步理解列表和元组4.1. 列表示例:4.2. 元组示例: 总结 1、python是什么 在Python中,列表和元组都是用于存储多个数据项的数据结构,但是它们有一些…

JavaWeb Tomcat

1.Web分类 静态web html这样的静态网页,只展示预先设定好的内容每个用户看到的内容是一样的不连接数据库,无法持久化数据(比如注册)动态web 动态展示内容每个用户看到的内容是不一样的,比如会有个性化推荐连接数据库&…

TienChin 项目改造完善项目结构分析

项目改造完善 更改 Banner Banner 生成网站:https://bootschool.net/ascii 更改启动类中的 Banner !> 如果不生效,需要重新编译一下项目工程(出现了启动之后还没改变就需要执行一下这个步骤): 出现的原因是可能你没有删除 .idea 文件与 .i…

夜不收见证:夫妻从内江到成都,从真诚到真相

他们从四川内江的一条小巷,走进了成都的大街小巷。那里的房屋挨挨挤挤,像是在讲述他们曾经的梦想和勇气。他们是那些在内江的土地上种下了友情种子的少年,他们在成都的大地上,硕果累累。 他们从初中的课桌前走到了成人的世界里&am…

模拟电路系列文章-滤波器常识

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 滤波是一个动作,对不同频率输入信号,实施不同的增益和相移,以形成输出。滤波器,是执行这种动作的硬件设备或者软件程序。无论滤…

DJ4-7 SDN、OpenFlow

目录 一、SDN 1、SDN 的引入 2、SDN 体系结构的特征 3、SDN 控制器 4、SDN 通用转发 二、OpenFlow 一、SDN 1、SDN 的引入 软件定义网络 (Software Defined Network) SDN 源自美国斯坦福大学 Clean Slate 研究组提出的一种新型网络创新架构,可通过软件编程…

OCC-BEV:基于三维场景重建的多摄像机统一预训练

论文:https://arxiv.org/pdf/2305.18829.pdf 代码:https://github.com/chaytonmin/Occ-BEV 多摄像机3D感知技术(能够收集车辆周围360的环境信息)已经成为自动驾驶领域的一个突出研究领域,为 Lidarb-based 解决方案提供…

EMC学习笔记(九)特殊信号的EMC处理(一)

特殊信号的EMC处理(一) 1.电源接口EMC防护滤波电路1.1 24VDC电源口1.2 电源地的EMC电路1.3 Flyback EMC电路1.4 BUCK电路EMC电路1.5 推挽电路 2.时钟电路的EMC防护2.1 有源时钟2.2 无源时钟2.3 差分时钟 3.复位电路EMC防护4.对外接口信号的EMC防护4.1 差…

简历不要随意给猎头!他们会胡乱投递,影响你之后求职!

猎头是求职的重要途径之一,但猎头群体良莠不齐,并不是每个猎头都值得信任。 一位网友就对猎头持怀疑态度,问大家: 简历可以随意给猎头吗?给他们的时候需要注意什么?他们会不会群发,对自己之后求…

软考A计划-系统集成项目管理工程师-一般补充知识-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

F429驱动TFT裸屏时LTDC

F429驱动TFT裸屏时LTDC时序配置说明(以V6的7寸驱动为例) 说明: 1. 经常有兄弟问到这个问题,所有这里就写一个帖子。 2. 基础知识学习: TFT LCD的DE模式和HV模式的区别:http://bbs.armfly.com/read.php?tid…

Kafka搭建部署

解压文件 启动zookeeper 配置kafka环境变量 查看Kafka的版本内容 分发Kafka文件到slave1、slave2 修改server.properties文件 在Master、slave1和slave2节点上分别启动Kafka 在Master节点上执行如下命令来创建Topic 解压文件 tar -zxvf kafka_2.12-2.4.1.tgz -C /opt …

2022(一等奖)基于哨兵2影像的典型地表参量和红边指数的特征空间石漠化遥感监测模型

作品介绍 1 监测模型设计概述 (1)应用背景 石漠化是危害人们安全的自然灾害之一,也是土壤荒漠化其中的一种。我国西南地区是全球石漠化现象最严重的地区之一,长期的人为干预使得生态环境变得非常敏感,地表植被破坏严…

升级系统到Proxmox VE 8

Proxmox VE 8.0正式版发布 Proxmox VE 需要升级到7.4,验证一下。 rootpve99:~# pveversion pve-manager/7.4-13/46c37d9c (running kernel: 5.13.19-6-pve) rootpve99:~# pve7to8 CHECKING VERSION INFORMATION FOR PVE PACKAGES Checking for package updates.…

【实战与杂谈】本地搭建自己的游戏王卡片生成器

声明: 1.游戏王卡片制作器本身就是由【kooriookami】开发的,用于DIY卡片因此我只是原有功能再现并不会追加新功能 2.其次数据和卡图均来源于网络,因此我也只提供网络能获取该内容的途径,并不会预先准备好 最近一直没有时间看回复…

2023数字化产品经理如何建立自己的护城河线下演讲-上

来源:三爷出席《人人都是产品经理》2023数字化产品经理大会演讲实录 各位朋友们,大家下午好,非常高兴呢能受到人人都是产品经理官方的邀请,今天能有这样一个机会站在这里和大家做一个简单的分享。 ​ 编辑 添加图片注释&#xf…

C#/.Net的多播委托到底是啥?彻底剖析下

前言 委托在.Net里面被托管代码封装了之后,看起来似乎有些复杂。但是实际上委托即是函数指针,而多播委托,即是函数指针链。本篇来只涉及底层的逻辑,慎入。 概括 1.示例代码 public delegate void ABC(); //委托写在类的外面 publi…

Linux 多路转接 —— poll

目录 传统艺能😎poll🤣struct pollfd🤣 poll 服务器😘PollServer类😁运行服务器😒事件处理😁 服务器测试😂 传统艺能😎 小编是双非本科大二菜鸟不赘述,欢迎米…

【初识C语言(4)】操作符

文章目录 1. 算术操作符2. 移位操作符3. 位操作符4. 赋值操作符5. 单目操作符6. 关系操作符7. 逻辑操作符8. 条件操作符9. 逗号表达式10. 下标引用、函数调用和结构成员 1. 算术操作符 - * / %加 减 乘 除 求余 加减乘 都很简单没啥可讲的,这里主要讲解 除 和 求余。…