设计模式七:外观模式

什么是外观模式

有助于隐藏系统的内部复杂性,并通过一个简化的接口向客户端暴露必要的部分,这就是外观模式

使用场景

要为一个复杂系统提供单个简单的入口点时,就可以使用此模式
优点:
1.可以改变系统内部代码,但是客户端代码不用关心也不受影响。
2.在多层系统中,可以为每一层引入一个外观接口,并让所有层级通过这些外观相互通信,提高了层级之间的松耦合性,尽可能保持层级独立。

典型案例

启动一台电脑,不会把内存、硬盘CPU加点运行,引导加载程序,CPU启动操作系统内核等这些复杂性暴露给客户端,而是创建一个外观(启动键)来封装整个过程,并且保证所有步骤按正确的次序运行。

补充知识

ABCMeta 抽象基类
1.需要使用metaclass关键字继承ABCmeta
2.使用@abstractmethod修饰器声明的方法在子类中必须实现

实例代码

from abc import ABCMeta,abstractmethodclass Hardware(metaclass=ABCMeta):#定义硬件基类,子类必须实现 getpower start off 三个方法@abstractmethoddef __init__(self):passdef __str__(self):pass@abstractmethoddef getpower(self):pass@abstractmethoddef start(self):pass@abstractmethoddef off(self):passclass CPU(Hardware):def __init__(self):self.name = 'CPU'def getpower(self):print('{} get power.... '.format(self.name))def start(self):print('{} start ............OK'.format(self.name))def off(self):print('{} off ............OK'.format(self.name))class Disk(Hardware):def __init__(self):self.name = 'Disk'def getpower(self):print('{} get power.... '.format(self.name))def start(self):print('{} start ............OK'.format(self.name))def off(self):print('{} off ............OK'.format(self.name))class Memory(Hardware):def __init__(self):self.name = 'Memory'def getpower(self):print('{} get power.... '.format(self.name))def start(self):print('{} start ............OK'.format(self.name))def off(self):print('{} off ............OK'.format(self.name))class Computer:#外观def __init__(self):#创建所有需要的硬件类实例self.name = 'Computer'self.cpu = CPU()self.disk = Disk()self.memory = Memory()def start(self):#启动入口self.cpu.getpower()self.disk.getpower()self.memory.getpower()self.memory.start()self.disk.start()self.cpu.start()print('{} start ............OK'.format(self.name))def off(self):#关闭入口self.cpu.off()self.memory.off()self.disk.off()print('{} off ............OK'.format(self.name))def main():pc = Computer()#用户只需要知道启动方法,无需知道启动细节,下面关闭同理pc.start()print()pc.off()if __name__ == "__main__":main()

Python设计模式:外观模式相关推荐

  1. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  2. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  3. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  4. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  5. Python设计模式-解释器模式

    Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...

  6. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  7. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  8. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  9. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  10. 设计模式--------外观模式

    设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...

最新文章

  1. SAP S/4HANA现金管理之变
  2. VC++中 PostMessage和SendMessage的区别
  3. 直播 | EMNLP 2020:用语义分割的思路解决不完整话语重写任务
  4. JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
  5. open×××+Mysql+PAM构建强大的***系统
  6. 全网最好懂的Spring AOP原理
  7. lvs+keepalived+nginx+tomcat高可用高性能集群部署
  8. jq使用教程08_基于估值波动周期的择时策略
  9. T3 - 构建大型 Web 应用的 JavaScript 框架
  10. ASP.NET中操作SQL数据库
  11. 前端CSS - 相对定位,绝对定位,固定定位
  12. gogs 迁移外部仓库
  13. C语言简单编程之一元二次方程求解
  14. 现网必用的主备冗余技术,VRRP理论+配置
  15. 关于MVC控制器导出Excel时MemoryStream流已关闭的问题
  16. 常见安防存储估算标准
  17. [HTML]列表、表格、表单
  18. 形容计算机科学与技术的句子,关于描写未来科技的句子33条
  19. Mybatis提取BigDecimal字段值显示丢失末尾0精度的问题解决
  20. 关于MBP(苹果MAC)终端输入su命令出现Sorry提示的解决办法

热门文章

  1. pands 画图 调整大小_两个精品案例解释机械设计的步骤,有思路,再着手画图...
  2. llvm+clang 添加 LTO(Link Time Optimization) 支持
  3. 成员变量和局部变量详解
  4. mongodb java 不等于_mongoDB在java上面的应用
  5. c++获取ctrl+v内容_WPS表格——CTRL快捷键的用法
  6. 如何设置电脑自动锁屏_MIUI第415期:新增智能显示锁屏通知、状态栏数字电量外显...
  7. QwebSocket即时通信
  8. 30多个Java实战项目,全部在这里了。
  9. c语言程序设计题库 微盘下载,《C语言程序设计》题库及答案.pdf
  10. C语言计算机题库第91套,二级c语言上机题库 2013年9月全国计算机等级考试二级C语言上机题库100套.doc...