商城网站除了域名备案还要,wordpress怎么使用七牛云,电商平台软件开发公司,做qq群头像网站8-Python与设计模式–门面模式
一、火警报警器#xff08;1#xff09; 假设有一组火警报警系统#xff0c;由三个子元件构成#xff1a;一个警报器#xff0c;一个喷水器#xff0c; 一个自动拨打电话的装置。其抽象如下#xff1a; class AlarmSensor:def run(self):…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_sensorAlarmSensor()water_sprinkerWaterSprinker()emergency_dialerEmergencyDialer()alarm_sensor.run()water_sprinker.run()emergency_dialer.run()但如果在多个业务场景中需要启动三个部件怎么办CtrlC加上CtrlV么
当然可以这样但作为码农的基本修养之一减少重复代码是应该会被很轻易想到的方法。这样需要将其进行封装在设计模式中被封装成的新对象叫做门面。 门面构建如下
class EmergencyFacade:def __init__(self):self.alarm_sensorAlarmSensor()self.water_sprinkerWaterSprinker()self.emergency_dialerEmergencyDialer()def runAll(self):self.alarm_sensor.run()self.water_sprinker.run()self.emergency_dialer.run()这样业务场景中这样写就可以了
if __name____main__:emergency_facadeEmergencyFacade()emergency_facade.runAll()打印如下 Alarm Ring… Spray Water… Dial 119… 二、门面模式
门面模式也叫外观模式定义如下要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。
门面模式提供一个高层次的接口使得子系统更易于使用。门面模式注重“统一的对象”也就是提供一个访问
子系统的接口。门面模式与之前说过的模板模式有类似的地方都是对一些需要重复方法的封装。
但从本质上来说是不同的。模板模式是对类本身的方法的封装其被封装的方法也可以单独使用
而门面模式是对子系统的封装其被封装的接口理论上是不会被单独提出来用的。三、门面模式的优点和使用场景
优点
1、减少了系统之间的相互依赖提高了系统的灵活
2、提高了整体系统的安全性封装起的系统对外的接口才可以用隐藏了很多内部接口细节若方法不允许使用则在门面中可以进行灵活控制。使用场景
1、为一个复杂的子系统提供一个外界访问的接口。这类例子是生活还是蛮常见的例如电视遥控器的抽象模型电信运营商的用户交互设备等
2、需要简化操作界面时。例如常见的扁平化系统操作界面等在生活中和工业中都很常见。四、门面模式的缺点
1、门面模式的缺点在于不符合开闭原则一旦系统成形后需要修改几乎只能重写门面代码
这比继承或者覆写等方式或者其它一些符合开闭原则的模式风险都会大一些。