外观模式的学习

[QMT和ptrade量化交易小白入门]-120、卖出深度虚值期权的三重过滤策略 本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 阅读详情

家庭影院管理项目:

​ 当你想看电影时,你需要 开爆米花机->开投影仪->开机顶盒选择电影->拿爆米花->调低灯光->播放->结束后,关闭各种设备。

传统模式

​在这里插入图片描述

​   通过main来创建各大对象,使用一系列方法。

问题:

​  创建许多的对象,并调用相关方法,容易造成调用过程混乱,没有清晰的过程。

​  不利于在main中维护系统的操作

解决思路:定义一个高层接口,给子系统一组接口提供一致的界面。例如:对智能AI说 我要看电影,于是机器开始运行。等电影结束了,便关闭相关机器。

 

外观模式

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

 

外观模式结构

在这里插入图片描述

 1.外观 (Facade) 提供了一种访问特定子系统功能的便捷方式, 其了解如何重定向客户端请求, 知晓如何操作一切活动部件

 2.创建附加外观 (Additional Facade) 类可以避免多种不相关的功能污染单一外观, 使其变成又一个复杂结构。 客户端和其他外观都可使用附加外观。

 3.复杂子系统 (Complex Subsystem) 由数十个不同对象构成。 如果要用这些对象完成有意义的工作, 你必须深入了解子系统的实现细节, 比如按照正确顺序初始化对象和为其提供正确格式的数据。

 子系统类不会意识到外观的存在, 它们在系统内运作并且相互之间可直接进行交互。

 4.客户端 (Client) 使用外观代替对子系统对象的直接调用。

 

外观模式适合应用场景

 1.如果你需要一个指向复杂子系统的直接接口, 且该接口的功能有限, 则可以使用外观模式。

 2.如果需要将子系统组织为多层结构, 可以使用外观。

 

实现方式

 1.考虑能否在现有子系统的基础上提供一个更简单的接口。 如果该接口能让客户端代码独立于众多子系统类, 那么你的方向就是正确的。

 2.在一个新的外观类中声明并实现该接口。 外观应将客户端代码的调用重定向到子系统中的相应对象处。 如果客户端代码没有对子系统进行初始化, 也没有对其后续生命周期进行管理, 那么外观必须完成此类工作。

 3.如果要充分发挥这一模式的优势, 你必须确保所有客户端代码仅通过外观来与子系统进行交互。 此后客户端代码将不会受到任何由子系统代码修改而造成的影响, 比如子系统升级后, 你只需修改外观中的代码即可。

 4.如果外观变得过于臃肿, 你可以考虑将其部分行为抽取为一个新的专用外观类。

 

外观模式优缺点

 ✔️​你可以让自己的代码独立于复杂子系统。

 ❌外观可能成为与程序中所有类都耦合的上帝对象

 

更改后的项目:

​在这里插入图片描述

代码:

//爆米花机
public class Popcorn {
    private static Popcorn instance = new Popcorn();

    public static Popcorn getInstance(){
        return instance;
    }

    public void on(){
        System.out.println("爆米花机 开机");
    }

    public void off(){
        System.out.println("爆米花机 关机");
    }

    public void pop(){
        System.out.println("爆米花机 工作完成");
    }
}

//机顶盒
public class BoxPlayer {
    private static BoxPlayer instance = new BoxPlayer();
    
    public static BoxPlayer getInstance(){
        return instance;
    }
    
    public void on(){
        System.out.println("机顶盒 开机");
    }
    
    public void off(){
        System.out.println("机顶盒关机");
    }
    
     public void play(){
         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 class Light {
    private static Light instance = new Light();

    public static Light getInstance() {
        return instance;
    }

    public void on(){
        System.out.println("开灯");
    }

    public void off(){
        System.out.println("关灯");
    }

    public void dim(){
        System.out.println("灯光调暗");
    }

    public void bright(){
        System.out.println("灯光变亮");
    }
}
public class HomeTheaterFacade {
    //定义各个子系统对象
    private Popcorn popcorn;
    private BoxPlayer boxPlayer;
    private Projector projector;
    private Light light;

    //构造方法
    public HomeTheaterFacade(){
        super();
        this.popcorn = Popcorn.getInstance();
        this.boxPlayer = BoxPlayer.getInstance();
        this.projector = Projector.getInstance();
        this.light = Light.getInstance();
    }

    public void ready(){
        popcorn.on();
        boxPlayer.on();
        projector.on();
        light.on();
    }

    public void play(){
        light.dim();
        projector.focus();
        boxPlayer.play();
    }
    
    public void end(){
        light.bright();
        popcorn.off();
        projector.off();
        boxPlayer.off();
    }
}
public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();

        homeTheaterFacade.ready();

        homeTheaterFacade.play();

        homeTheaterFacade.end();
    }
}

 

外观模式的注意事项和细节

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

【异常】Cursor导入Karpathy指南失败解决方案Failed to import GitHub/GitLab rules: Error executing git: Cloning into 摘要:本文解决了Git克隆单个文件报错的问题,指出git clone只能克隆整个仓库而非单个文件。提供了两种解决方案:1) 推荐手动创建规则文件,在Cursor项目中新建.mdc文件并粘贴Karpathy行为指南完整内容;2) 备选克隆整个仓库获取文件。指南包含编码行为规范,强调简单性、精准修改和明确目标。还说明了如何设置全局规则和即时生效的方法。 阅读详情

相关推荐

人工智能训练师技能等级认定四级技能考核试卷-样题1

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总分100分,考试时间150分钟。试卷涵盖数据处理、模型训练准备及系统维护等核心技能:1)垃圾分类数据集规范与处理(30分),要求评估数据格式并编写Python处理代码;2)学生成绩数据集分析(20分),涉及数据预处理、可视化及相关性分析;3)数据标注审核(10分),重点审核标注准确性;4)智能数据服务系统维护与优化(40分),包括安全帽数据集的项目创建、数据处理及平台协作。考核强调Python编程、数据处理平台操作及AI工作流程的实践能力。

weixin_42221934的博客 440

设计模式之外观模式

三、设计模式 13、外观模式(Facade Pattern) 13.1 定义 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。 13.2...

chinaichao2949的博客 161

华为2288H-V5服务器做raid的详细步骤

操作步骤 服务器启动界面 按del键进入设置输入密码,2288H-v5默认密码是Admin@9000 移动光标选择device manager 驱动管理选择configurationutility 配置管理 选择main menu 主菜单 选择第一个 configuration management 配置管理 选择create virtual driver 创建虚拟驱动选择select RAID level 选择RAID等级选择level-5 选择select drivers 选择驱......

weixin_46041124的博客 1万+

外观模式(Facade Pattern)

一、定义 外观模式(Facade Pattern):结构型模式之一,提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。 二、UML类图 三、角色职责 外观角色(Facade):提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。 子系统角色(SubSystem):子系统在整个系统中可以是一个或多个模块,每个模块都有若干类组成,这些类可能相互之间有着比较复杂的关系。 客户端(Client):外观接口调用测试者。 四

奶油芝士蘑菇汤的博客 4004

别光看原理图了!手把手教你用Altium Designer搞定STM32F411最小系统的PCB布局(附电源/晶振/复位电路实战)

本文详细介绍了使用Altium Designer进行STM32F411最小系统PCB布局的实战技巧,涵盖电源分配网络优化、高速信号布线及系统级布局策略。通过规范的工程结构建立、关键设计规则预设和核心电路模块布局,帮助工程师提升PCB设计效率与信号完整性。特别针对STM32最小系统的电源、晶振和复位电路提供了专业解决方案。

weixin_42653691的博客 168

6 赫斯曼网管软件industrial hivision用户管理

文章目录前言一、打开Industrial HiVision服务器二、在用户管理界面添加策略三、使用可选策略四、接受策略总结 前言 安装 Industrial HiVision 后,所有人都能广泛使用程序。安全起见,请进行相 关配置,对访问权限进行限制。 本文主要介绍用户管理基于某种角色模型。在访问角色中定义角色名称,通过分配访问权限给这些角色分配角色功能。例如,给管理人员自然要分配可用的权限,而观察员尽管可以登录,但没有能够进行更改的权限。Industrial HiVision 提供以下访问角色: 

t98746194的博客 1381

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

外观模式(Facade Pattern)是一种结构型设计模式,这种模式通过为多个复杂的子系统提供一个一致的接口,来隐藏系统的复杂性,从而使得这些子系统更加容易被访问。该模式的主要意图是为子系统中的一组接口提供一个一致的界面,定义了一个高层接口,使得这一子系统更加容易使用。外观模式在日常开发中是经常被使用的一种设计模式,它通过引入一个外观角色,简化了客户端与子系统之间的交互关系,为复杂的子系统调用提供一个统一的入口,降低了客户端的使用难度。

miaoyl的博客 3109

海思芯片OpenHarmony系统移植:Sensor传感器模块HDF驱动配置HCS文件详解

海思系列芯片的传感器模块通过HDF(Hardware Driver Foundation)驱动框架进行管理和配置。传感器HCS(HDF Configuration Source)配置文件定义了各类传感器的硬件参数、总线配置、寄存器序列等信息,为传感器驱动提供必要的初始化和运行参数。海思系列芯片适配OpenHarmony的传感器HDF配置HCS文件是传感器驱动开发的关键部分,通过合理配置可以实现各种传感器设备的驱动支持。

m0_67505153的博客 209

设计模式之外观模式详解(附应用举例实现)

设计模式之外观模式详解(附应用举例实现)

pursuit的博客 4745

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3804

逆向分析顶象5代各类验证码类型的图片还原方法(附源码)

6.刷新滑块验证码图片,会进入之前的for循环断点,分析此处的代码会发现,该循环循环了处理了n字符串的值,取出n字符中的值并使用charCodeAt生成Unicode 编码,然后又调用了a函数,如果a函数返回true就会把之前生成的Unicode编码+1,a函数参数分别是c数组和Unicode取余32后的值,然后再把Unicode取余32后的值push进c数组,这里的n值为滑块碎片背景图的name。2.搜索"ranges":,会找到ranges赋值的地方,在此处代码断点,并点击跳过断点,结束此次调试。

老衲爱洗头的博客 1196

iOS设计模式之外观模式

外观(Facade)模式:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 外观(Facade)模式是“迪米特法则”的典型应用,它有以下主要优点。 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。 对客户屏蔽...

liuyinghui523的专栏 673

【拼多多笔试题汇总】2024-03-24-拼多多春招笔试题

A 小镇上有个奇特的游戏。游戏开始时,A 先生准备了一排 nnn 个物品。K 小姐和卢小姐则轮流进行操作。首先,K 小姐可以选择移除至多 xxx 个物品。接着,卢小姐也可以选择移除剩余物品中的至多 yyy 个。游戏的目标是,K 小姐想尽量让剩余物品的价值之和最大化,而卢小姐则想将剩余物品的价值之和最小化。假设两人都采取最优策略,请问最后剩余物品的价值之和是多少?第一行包含五个正整数 n,m,k,x,yn, m, k, x, yn,m,k,x,y,分别表示物品的总数、K 小姐最多可移除的物品数、卢小姐最多可移

春秋招笔试突围 1万+

设计模式学习—外观模式(Facade Design Pattern)

一、我的理解 外观模式就像银行柜台的接待员,汇款、存款等操作在后台运行着很复杂的业务逻辑,但是通过接待员,他将后台的这种种复杂的业务逻辑简化为一个个对外的简单方法,比如你说一句“汇款”,调用他的汇款接口,输入相应参数后,他会自己去调用相关业务实现这一功能。相当于向外屏蔽了内部的种种复杂情形。 二、Java实例 其中Shape接口便于统一调用,真正实现外观模式的类是ShapeM

闲鱼的博客 727

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

认真学习设计模式之外观模式(Facade Pattern)

# 【1】概述 `外观模式(Facade),也叫“过程模式`:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。 **UML原理图** ![在这里插入图片描述](https://img-blog.csdnimg.cn/997a1e5d30e64fd0b3693875754e468e.png) **对类图说明(分类外观

小小默:进无止境 1323

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

设计模式学习--适配器模式(Adapter Pattern)+外观模式(Facade Pattern)

针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!Android前沿技术大纲全套体系化高级架构视频Android高级架构资料、源码、笔记、视频。

2401_84562251的博客 971

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java设计模式学习—外观模式(Facade Pattern)

java设计模式-外观设计模式

m0_37742889的博客 312

学习设计模式-外观模式(Facade Pattern)

定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义类了一个高层接口,让子系统更容易使用。 介绍 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。 何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一...

提莫达达的博客 241

设计模式学习--14.外观模式(Facade Pattern)

package com.designepattern.facadepattern; /** * @Date:2020/12/2 * @Content: */ /*** * 1.外观模式、门面模式 * 问题:仅仅是类的迭加使用吗? */ public class MainDemo { public static void main(String[] args) { Facade f=new Facade(); f.facadeMet...

u010031813的博客 127

设计模式学习笔记十三:外观模式(Facade Pattern)

设计模式学习笔记十三:外观模式(Facade Pattern)      1.概述      外观模式(Façade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这个子系统更加容易使用。通过这个接口,其他系统可以方便的调用子系统中的功能,而忽略子系统内部发生的变化。      外观模式(Façade)是经常使用的模式之一,并且可以应用在任

AlbenXie的博客 724

外观模式学习总结

目录 外观模式 引言 定义 模式类图 实例 实例描述 实例类图 代码实现 模式扩展 外观类的数量 抽象外观类 总结 模式优点 模式缺点 外观模式 引言 一般情况下,一个Web网站都会提供一个首页,作为网站的入口,我们只需要记住这个首页的地址,即可访问它的各个子页面的超链接。当然,用户也可以记住每个子页面的地址,直接通过子页面的地址直接访问。实际上用户是不会记...

江川的博客 1821

设计模式学习——外观模式

设计模式学习——外观模式 很久没有拿出时间来写一些东西了。最近在学习设计模式的内容,收益匪浅,打算写一个系列。 表述 将复杂的子系统内容,整合成简约、学习成本低的接口。 举例 我们早晨出门上班,虽然每天都做得没有感觉复杂,但是在代码中体现,就会是这样: breadMarker.make(); door.open(); dorr.close(); car.start(...

Martin0207的博客 281

学习设计模式《二》——外观模式

外观模式的本质是【封装交互、简化调用】

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1090

java设计模式学习笔记--外观模式

生活场景大家可能为了有一台满足自己需求的电脑,你可能会选择自己到各大厂商买配件。自己组装,但是这样需要熟悉硬件,还要考虑他们之间的兼容性。你也可能找到一家装机公司,让他们代理实现。那么这个装机公司就相当于外观模式(Facade)。在代码中,各个零件厂商就相当于各种功能模块,客户端需要组装自己的功能模块,他们同样需要知道十分了解这些功能模块的功能,非常麻烦。所以就出现了facade模式。 由上所述可

坚持,唯1. 498
上一篇: 组合模式的学习
下一篇: 享元模式的学习
code_Floyed
博客等级 码龄7年 3粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值