您的位置:首页 > 编程语言 > Python开发

Python设计模式:外观模式

2020-01-13 20:02 113 查看

设计模式七:外观模式

什么是外观模式

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

使用场景

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

典型案例

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

补充知识

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

实例代码

from abc import ABCMeta,abstractmethod

class Hardware(metaclass=ABCMeta):
#定义硬件基类,子类必须实现 getpower start off 三个方法
@abstractmethod
def __init__(self):
pass

def __str__(self):
pass

@abstractmethod
def getpower(self):
pass

@abstractmethod
def start(self):
pass

@abstractmethod
def off(self):
pass

class 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()
  • 点赞
  • 收藏
  • 分享
  • 文章举报
生活就是屁颠屁颠的过 发布了13 篇原创文章 · 获赞 0 · 访问量 718 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: