看得懂的外观设计模式 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()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IDA7.0 配置内核调试,双机调试
- ViewPager2与Fragment
- SpringBoot整合SpringSecurity实现JWT认证
- 用Python爬取股票数据,绘制K线和均线并用机器学习预测股价(来自我出的书)
- 用非常硬核的JAVA序列化手段实现对象流的持久化保存
- 微信小程序语音同步智能识别的实现案例
- 数据结构之链式队列的代码实现及有趣应用
- 用自定义链式栈解决力扣括号匹配问题
- String及StringTable(三):StringBuilder源码解读
- UidGenerator:百度开源的分布式ID服务(解决了时钟回拨问题)
- String及StringTable(四):StringBuffer与StringBuilder对比
- Apache James 2.3.2.1 邮箱服务搭建
- SpringBoot实现微信小程序登录的完整例子
- String及StringTable(五):java8的新工具类StringJoiner
- spring security oauth2使用refresh_token报错UserDetailsService is required