看得懂的外观设计模式 python3 实现

外观设计模式在平常的代码编写中,会经常使用。在平常代码的编写时,即使程序员没有从标准上认识过外观设计模式,但在开发的过程中,也会从代码的多方面角度考虑,从而编写了符合外观设计模式的代码。

很多程序员都有这种感觉,在学习一些自认为没有了解的技术时,发现自己已经接触过了一部分内容,这一部分内容有标准上书面上有着准确的定义。

拥有丰富项目经验的程序员,在考虑了项目整体代码架构、性能优化等方面后,编写的程序将和一些标准定义的技术发生雷同。

学习设计模式,是促进相关技术的增长,但是在没有丰富的项目经验前,很大一部分学习了设计模式的开发者,将不懂如何使用设计模式融入到自己的代码编写之中。所以我写的设计模式文章,大多数只是简单的实现了设计模式,并不会把多余的内容加入到实现之中。因为我的观点是“徐徐渐进,在有了项目经验后,在进一步考虑项目的优化迭代”。

回归正题,开始讲解外观设计模式。
外观设计模式,简单的来说,是通过编写一个简单的接口,不暴露系统的复杂性,增加这个系统的易用性,屏蔽内部实现。
在日常开发中,屏蔽系统内部实现是经常做的事情,所以对于一部分开发者来说,外观设计模式是在项目中经常使用的技术。接下来就来看一下外观设计模式的基本实现。

例:通过一个按钮,控制空调的启动。
分析空调的启动可以简要的分为以下步骤:点击按钮——>收到点击按钮的信号——>开启制冷——>开启温度检测自动调温。

我们首先新建一个制冷器与温度计类,模拟制冷器与温度计的启动:

#制冷器
class Refrigerator():def start(self):print('制冷器启动...')def stop(self):print('制冷器停止...')
#温度计
class Thermometer():def start(self):print("温度计启动...")def stop(self):print("温度计停止...")

常规情况下,我们可以直接调用制冷器后再调用温度计,这个时候就比较麻烦,内部系统暴露出来,使用极其繁琐。
接下来新建一个空调类,用以统一调用这两个类,实现制冷的开始。

#空调类
class AirConditioner():#初始化def __init__(self):self.refrigerator=Refrigerator()self.thermometer=Thermometer()#开始键按下   def startBtnClick():print('空调启动键按下...')self.start()#停止键按下    def stopBtnClick():print('空调关闭键按下...')self.stop()#开始方法    def start(self):print('空调启动...')self.refrigerator.start()self.thermometer.start()#停止方法    def stop(self):print('空调停止...')self.refrigerator.stop()self.thermometer.stop()

以上的空调类中,初始化中实例化了制冷器类与温度计检测类,在开始按钮点击的方法中,启动了开始方法,开始方法打开了制冷器与温度检测;同理,停止方法也是如此。调用方法如下:

ac=AirConditioner()
ac.start()

新建空调后,开始即可,查看运行效果:
在这里插入图片描述
最后查看完整的代码:

#空调类
class AirConditioner():#初始化def __init__(self):self.refrigerator=Refrigerator()self.thermometer=Thermometer()#开始键按下   def startBtnClick():print('空调启动键按下...')self.start()#停止键按下    def stopBtnClick():print('空调关闭键按下...')self.stop()#开始方法    def start(self):print('空调启动...')self.refrigerator.start()self.thermometer.start()#停止方法    def stop(self):print('空调停止...')self.refrigerator.stop()self.thermometer.stop()#制冷器
class Refrigerator():def start(self):print('制冷器启动...')def stop(self):print('制冷器停止...')
#温度计
class Thermometer():def start(self):print("温度计启动...")def stop(self):print("温度计停止...")ac=AirConditioner()
ac.start()

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

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

相关文章

剑指offer之快速排序

1 快速排序 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 2 分析…

机器学习------精心总结

1.数学 偏差与方差拉格朗日核函数凸优化协方差矩阵Hessian矩阵CDF(累计分布函数)高斯概率密度函数中心极限定理2.机器学习 Java 机器学习 工具 & 库 1.处理小数据效果好 2.深度学习—大数据,超过500w;图像,语言方…

mysql命令去重_MySQL去重的方法整理

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

NuGet包管理平台

这节来讲一下.NET下的包管理平台:NuGet。简介我们做一个项目,除了自己的代码文件之外,实际上还要引用诸多代码文件,这些文件可能是我们自己封装的底层框架代码,或者为了完成某个功能而引用的工具类文件等等。在.NET里边…

【ArcGIS风暴】ArcGIS影像批量裁剪(分幅)方法总结

实际工作中经常需要采用规则格网或标准分幅格网去对影像进行分幅。ArcGIS提供了强大的影像批量裁剪(分幅)的功能,常规的方法是利用掩膜提取工具手工重复裁剪,费时又费力,裁到让GISers怀疑人生。。。。。当然了如果你是个码农,会使用Python语言的话就很简单了。前面也有文…

Python变量的复制

Python变量的复制 dic {a: 1} dic_fake_copy dic dic_fake_copy.update({b: 2}) print dic_fake_copy %s % dic_fake_copy print dic %s % dic 输出结果为: In [6]: print dic_fake_copy %s % dic_fake_copy dic_fake_copy {a: 1, b: 2}In [7]: print dic %s…

看得懂的设计模式 享元模式python3 最基本(简单)实现

在考量系统内存合理使用时,通过享元模式可降低性能压力以及降低资源占用;主要实现是通过共享数据这一思想实现资源的合理分配。 在开发项目时,很多情况下会存在过多的相似对象,该对象有相同的共同点,该共同点在程序设…

剑指offer之最小的K个数

1 问题 输入N个整数,找出其中最小的K个,例如输入数组6、5、1、4、 2、 7、 3、 8,最小的4个数是1、2、3、4 2 分析 1)我们可以用快速排序从小到大,但是时间复杂度是O(nlogn) 我们取出最前面的K个数就行。 2&#xf…

JCheckbox全选

在实际的使用过程中的一些小技巧。在图形界面的编程中,复选框一般是多个在一起,如果要进行全选时,则要将复选框全部设置setSelected为true,那么如果当前容器里面的复选框很多的时候怎么办呢,我们可以采用向下转型来完成…

creo管道设计教程_CREO/PROE产品设计教程之四芯花线建模,加深对关系式的认识...

阅读完,如果觉得有用,那么点击"关注"和点赞是对作者的一种尊重和鼓励。版权所有,抄袭必究。春节前,基本敲定和相关知名出版社在2020年的图书创作及出版计划。文:钟日铭我曾经介绍过三芯"花线"建模…

如何使用JWT进行身份验证与授权

简介JWT定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。工作流程1、用户使用账号、密码登录应用,登录的请求发送到认证服务器。2、认证服务器进行用户验证&#xff…

云应用基础技术成熟需七年时间

本文讲的是云应用基础技术成熟需七年时间,【IT168 资讯】市场研究机构Gartner, Inc.近期认为尽管云计算市场目前正处于活跃、增长和高潜力时期……  市场研究机构Gartner,Inc.近期认为尽管云计算市场目前正处于活跃、增长和高潜力时期,但是在云计算或服…

Qt 第一步 HelloWorld 的第一个程序

简言 Qt 是基于C的 GUI 解决方案。QT简单易学(底层封装的好)、跨平台、相关资料易得到。 开始写Qt 相关的文章的主要原因是,我本人在编写一个视频录制及相关处理的项目,写到一半发现.net winform 相关UI的处理限制较大&#xff…

ArcGIS 10.x属性表乱码问题解决办法

ArcGIS 10.x的版本,文件属性表老出现乱码的问题。 解决方法:在Cmd命令行中输入以下命令: reg add HKEY_CURRENT_USER\Software\ESRI\Desktop10.6\Common\CodePage /v dbfDefault /t REG_SZ /d 936 /f 版本找对应的该就行,10.2 …

SAP MM 采购订单收货被取消了还是不能增加新的delivery cost!

SAP MM 采购订单收货被取消了还是不能增加新的delivery cost! PO# 8500015169, we did GR and cancelled GR, there is no IR for this PO at present. ME22N, try to add a delivery cost ZCIP in the item, You cannot enter new delivery costs Message no. V1631 Diag…

样式中文字和图片对齐问题

html中,在图片和文字对齐的时候,一直没有达到想要的对齐效果,发现使用position中的相对定位绝对定位paddingmargin可以达到需要的效果。转载于:https://www.cnblogs.com/TheoryDance/p/5424456.html

webots仿真报警[ERROR] [1703399199.459991029]: Sampling period is not valid.

一、故障现象 在运行interace传感器使能程序时,报警[ERROR] [1703399199.459991029]: Sampling period is not valid. [ERROR] [1703399199.460080083]: Failed to enable lidar.并发生崩溃。 二、解决方式 1、尝试将程序中的TIME_STEP数值改为与WOrldInfo中的bas…

剑指offer之调整数组顺序使奇数位于偶数前面

1 问题 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,比如数组{6、 5 、1、 4、2 、7 、3、8、9}我们调整后变成这样{9、5、1、3、7 、2 、4 、8、6} …

负基础学python编程_【数据科学系统学习】Python # 编程基础[二]

在上一篇中我们讲到了函数,如果你想在所编写的别的程序中重用一些函数的话,应该怎么办?正如你可能想象到的那样,答案是模块(Modules)。我们这一篇就从模块说起。模块为了编写可维护的代码,我们把很多函数分组&#xff…

【JX4G】JX4G摄影测量工作站快捷键大全

本文章总结了JX4G数字摄影测量工作站中常用的快捷键及其用法。 JX4G快捷键一览表序号快捷键作用描述1X删除可以框选,右键删除2C强制闭合可以闭合等高线等3S图形映射开关控制二维图形在三维立体中的显示4Z输入高程值可锁定高程5T流线和折线之间互换流线和折线之间互换…