第5篇---Python设计模式之外观模式+含代码实现+学习python的赶快进
程序员文章站
2022-04-29 23:54:03
...
外观模式概念:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易维护。。大话来讲:就是封装,内部系统太复杂,为用户抽象出一个接口。。
案例一:
试想想你的电脑,你知道各种服务内部是怎样启动的吗? 你知道电脑从BIOS开始,都干了什么吗? 我相信好多人都不知道。那这些人难道不会用电脑吗? 显然不是的。。 原因:就是由于给我们封装了一些简单接口,才是我们可以灵活操作。。下面我们就以启动计算机中的各种服务为例子,介绍一个外观模式
为了简单,我们假设只有两种服务,分别是进程和文件服务。 这些服务中除了初始化方法外还有三种方法:启动boot(),终止kill(),创建服务create()。
from enum import Enum
from abc import ABCMeta, abstractmethod
State = Enum('State', 'new running sleeping restart zombie')
class Server(metaclass=ABCMeta):
@abstractmethod
def __init__(self):
pass
@abstractmethod
def boot(self):
pass
@abstractmethod
def kill(self, restart=True):
pass
class FileServer(Server):
def __init__(self):
self.name = 'FileServer'
self.state = State.new
def boot(self):
print('booting the {}'.format(self.name))
'''启动文件服务进程要求的操作'''
self.state = State.running
def kill(self, restart=True):
print('killing the {}'.format(self.name))
'''终止文件服务进程要求的操作'''
self.state = State.restart if restart else State.zombie
def create_file(self):
print("trying to create the file {}".format(self.name))
class ProcessServer(Server):
def __init__(self):
self.name = 'ProcessServer'
self.state = State.new
def boot(self):
print('booting the {}'.format(self.name))
'''启动进程服务进程要求的操作'''
self.state = State.running
def kill(self, restart=True):
print('killing the {}'.format(self.name))
'''终止进程服务进程要求的操作'''
self.state = State.restart if restart else State.zombie
def create_process(self):
print("trying to create the process {}".format(self.name))
class OperatingSystem:
'''外观'''
def __init__(self):
self.fs = FileServer()
self.ps = ProcessServer()
def start(self):
# 开启
[i.boot() for i in (self.fs, self.ps)]
def create_file(self):
return self.fs.create_file()
def create_process(self):
return self.ps.create_process()
if __name__ == '__main__':
os = OperatingSystem()
os.start()
os.create_file()
os.create_process()
上述代码中OperatingSystem类是外观类。用户想要启动,关闭,创建服务的 时候,只需要实例化它,然后让他去启动一些服务。。突然发现这跟代理模式有点渊源。不懂代理模式没关系,我们下一节更新。。。