Python与设计模式--门面模式

8-Python与设计模式–门面模式

一、火警报警器(1)

假设有一组火警报警系统,由三个子元件构成:一个警报器,一个喷水器,
一个自动拨打电话的装置。其抽象如下:

class AlarmSensor:def run(self):print "Alarm Ring..."
class WaterSprinker:def run(self):print "Spray Water..."
class EmergencyDialer:def run(self):print "Dial 119..."

在业务中如果需要将三个部件启动,例如,如果有一个烟雾传感器,检测到了烟雾。
在业务环境中需要做如下操作:

if __name__=="__main__":alarm_sensor=AlarmSensor()water_sprinker=WaterSprinker()emergency_dialer=EmergencyDialer()alarm_sensor.run()water_sprinker.run()emergency_dialer.run()

但如果在多个业务场景中需要启动三个部件,怎么办?Ctrl+C加上Ctrl+V么?

当然可以这样,但作为码农的基本修养之一,减少重复代码是应该会被很轻易想到的方法。这样,需要将其进行封装,在设计模式中,被封装成的新对象,叫做门面。
门面构建如下:

class EmergencyFacade:def __init__(self):self.alarm_sensor=AlarmSensor()self.water_sprinker=WaterSprinker()self.emergency_dialer=EmergencyDialer()def runAll(self):self.alarm_sensor.run()self.water_sprinker.run()self.emergency_dialer.run()

这样,业务场景中这样写就可以了:

if __name__=="__main__":emergency_facade=EmergencyFacade()emergency_facade.runAll()

打印如下:

Alarm Ring… Spray Water… Dial 119…

二、门面模式

门面模式也叫外观模式,定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。
门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重“统一的对象”,也就是提供一个访问
子系统的接口。门面模式与之前说过的模板模式有类似的地方,都是对一些需要重复方法的封装。
但从本质上来说,是不同的。模板模式是对类本身的方法的封装,其被封装的方法也可以单独使用;
而门面模式,是对子系统的封装,其被封装的接口理论上是不会被单独提出来用的。

三、门面模式的优点和使用场景

优点:
1、减少了系统之间的相互依赖,提高了系统的灵活;
2、提高了整体系统的安全性:封装起的系统对外的接口才可以用,隐藏了很多内部接口细节,若方法不允许使用,则在门面中可以进行灵活控制。使用场景:
1、为一个复杂的子系统提供一个外界访问的接口。这类例子是生活还是蛮常见的,例如电视遥控器的抽象模型,电信运营商的用户交互设备等;
2、需要简化操作界面时。例如常见的扁平化系统操作界面等,在生活中和工业中都很常见。

四、门面模式的缺点

1、门面模式的缺点在于,不符合开闭原则,一旦系统成形后需要修改,几乎只能重写门面代码,
这比继承或者覆写等方式,或者其它一些符合开闭原则的模式风险都会大一些。

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

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

相关文章

c语言习题1124

分别定义函数求圆的面积和周长。 写一个函数,分别求三个数当中的最大数。 写一个函数,计算输入n个数的乘积 一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息 写一个函数求n! ,利用该函数求1!2&…

功率半导体器件CV测试系统

概述 电容-电压(C-V)测量广泛用于测量半导体参数,尤其是MOS CAP和MOSFET结构。MOS(金属-氧化物-半导体)结构的电容是外加电压的函数,MOS电容随外加电压变化的曲线称之为C-V曲线(简称C-V特性),C-V 曲线测试可以方便的确…

opencv-使用 Haar 分类器进行面部检测

Haar 分类器是一种用于对象检测的方法,最常见的应用之一是面部检测。Haar 分类器基于Haar-like 特征,这些特征可以通过计算图像中的积分图来高效地计算。 在OpenCV中,Haar 分类器被广泛用于面部检测。以下是一个简单的使用OpenCV进行面部检测…

鸿蒙系统使用hdc_std.exe使用身份证读卡器等外设USB获得权限方法

hdc_std.exe是OpenHarmony 的命令行工具,由于使用的开源鸿蒙开发板上面没有文件管理器,所以无法通过U盘等方式进行安装.hap应用。 下面是使用hdc_std.exe安装身份证读卡器的步骤: 1、hdc_std.exe放桌面,然后WINR,打开…

CBTC 2023氢能展倒计时6天,最新同期会议活动Plus版发布

随着时间的推移,CBTC2023深圳氢能技术展览会即将拉开序幕。这场盛会将于11月30日在深圳福田会展中心盛大开幕,以“以储赋能,智造未来”为主题,旨在搭建一个商务交流、供需合作、创新产品发布的平台,让氢能全产业链之间…

寻找质数 II

题目描述 输入两个整数 a,b,计算并输出小于 a 的 b个质数,所有符合条件的质数里,输出最大的 b 个质数,按照从大到小输出,使用空格隔开。 假如符合条件的数量不够,则输出已经满足的质数。 如果…

详解Java中的异常体系机构(throw,throws,try catch,finally)

目录 一.异常的概念 二.异常的体系结构 三.异常的处理 异常处理思路 LBYL:Look Before You Leap EAFP: Its Easier to Ask Forgiveness than Permission 异常抛出throw 异常的捕获 提醒声明throws try-catch捕获处理 finally的作用 四.自定义异常类 一.异…

微信小程序:This Mini Program cannot be opened as your Weixin version is out-of-date.

项目场景: 问题描述 升级基础库3.2.0,然后PC端整个小程序都打不开了,点击小程序提示”This Mini Program cannot be opened as your Weixin version is out-of-date. Update Weixin to the latest version.“,并且点击Update Wei…

一个悄然崛起的国产软件!!AI 又进化了!!

大家好,我是 Jack。 AI 写代码想必很多人都体验过了,使用 AI 编程工具是一个大趋势,越早学会使用 AI 辅助你写代码,你的效率也会越高。 甚至有些公司已经要求员工具备 AI 编程能力。 对于学生党,AI 编程可以帮助我们…

MyBatisPlus总结

MyBatis-Plus时Mybatis的Best Partner MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 特性 无侵入损耗小强大的 CR…

Android开发从0开始(广播)

应用广播 发送标准广播的三步骤 发送标准广播: //发送标准广播 Intent intent new Intent("com.dongnaoedu.chapter09.standard"); sendBroadcast(intent); 定义广播接受者: public class StanderdReceiver extends BroadcastReceiver { public s…

在ASP.NET Core 中使用 .NET Aspire 消息传递组件

前言 云原生应用程序通常需要可扩展的消息传递解决方案,以提供消息队列、主题和订阅等功能。.NET Aspire 组件简化了连接到各种消息传递提供程序(例如 Azure 服务总线)的过程。在本教程中,小编将为大家介绍如何创建一个 ASP.NET …

PLC通过RS232转PROFINET与电子分析天平秤通讯案例

本案例是通过用兴达易控的XD-PNR200型RS232转Profinet网关连接电子分析天平秤与PLC通讯的配置案例,用到设备为西门子S7-1200PLC,RS232转Profinet网关,电子分析天平秤。 打开博图,添加PLC;本案例使用的是1200PLC。 添加…

『接口测试干货』| Newman+Postman接口自动化测试完整过程

『接口测试干货』| NewmanPostman接口自动化测试完整过程 1 Newman简介2 如何安装Newman?2.1 安装NodeJs2.2 安装Newman2.2 解决Newman不是内部命令 3 Newman使用3.1 Newman如何运行集合?3.2 如何查看帮助文档?3.3 环境变量设置3.4 关于全局变…

微信小程序制作

如果你也想搭建一个小程序,但不知道如何入手,那么今天我就教你如何使用第三方制作平台,在短短三十分钟内搭建一个小程序。 一、登录小程序制作平台 首先,登录到小程序制作平台的官方网站或应用程序,进入后台管理系统。…

【Oracle OCP考试】1z0-082(4)

1.Which two statements are true about the PMON background process? A. It rolls back transactions when a process fails(当进程失败时,它回滚事务) B. It registers database services with all local and remote listeners known to…

文章解读与仿真程序复现思路——电网技术 EI\CSCD\北大核心《考虑5G基站储能可调度容量的有源配电网协同优化调度方法》

这篇文章的标题涉及到以下关键概念: 5G基站: 提到了5G基站,这表明文章的焦点可能是与第五代移动通信技术相关的内容。5G技术对于提高通信速度、降低延迟以及支持大规模连接等方面有显著的改进,因此对于基站的电力需求和供应可能存…

2023年ESG投资研究报告

第一章 ESG投资概况 1.1 定义 ESG投资,亦称负责任投资,是一种融合环境(Environment)、社会(Social)和治理(Governance)考量的投资方法,旨在通过综合这些因素来优化投资…

美国汽车零部件巨头 AutoZone 遭遇网络攻击

Security Affairs 网站披露,美国汽车配件零售商巨头 AutoZone 称其成为了 Clop MOVEit 文件传输网络攻击的受害者,导致大量数据泄露。 AutoZone 是美国最大的汽车零配件售后市场经销商之一,在美国、墨西哥、波多黎各、巴西和美属维尔京群岛经…

算法-技巧-简单-只出现一次的数字、多数元素

记录一下算法题的学习10 只出现一次的数字 leetcode题目:给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且…