Python外观模式

来源:互联网 发布:qsfp28光模块端口 编辑:程序博客网 时间:2024/06/08 00:22

外观模式

  • 许多情况下,我么不想把内部复杂性暴露给客户端。外观模式有助于隐藏系统的内部复杂性,并通过一个简化的接口向客户端暴露必要的部分。
  • 外观模式跟代理模式有点像,都是在客户端和目标类之间建一个中间的类,客户端不直接调用目标的类,而是通过先调用中间类的方法,由中间类来实现怎么调用目标类。
  • 外观模式的目的是通过建立一个中间类,把调用目标类的代码都封装好,例如有时候目标类有很多个,逐一得去调用它们会很麻烦,这样通过中间类封装好的接口,客户端的调用就好很简单。
  • 使用外观模式的最常见理由是为一个复杂系统提供单个简单的入口点。引入外观之后,客户端代码通过简单地调用一个方法/函数就能使用一个系统。同时,系统内部并不会丢失任何功能,外观只是封装了内部系统。

应用案例

from enum import Enumfrom abc import ABCMetaState = Enum('State', 'new running sleeping restart zobie')class Server(metaclass=ABCMeta):    #@abstractmethod    def __init__(self):        pass    def __str__(self):        return self.name    #@abstractmethod    def boot(self):        pass    #@abstractmethod    def kill(self):        pass#一个模块化的操作系统可以有很多服务进程:文件服务进程、进程服务进程等。class FileServer(Server):#文件服务进程    def __init__(self):        self.name = 'FileServer'        self.state = State.new    def boot(self):        print('booting the {}'.format(self))        self.state = State.running    def kill(self, restart=True):        print('killing {}'.format(self))        self.state = State.restart if restart else State.zobie    def create_file(self, user, name, permissions):#用于创建文件        print('trying to create the file {} for user {} with permissions {}'.format(name, user, permissions))class ProcessServer(Server):#进程服务进程    def __init__(self):        self.name = 'ProcessServer'        self.state = State.new    def boot(self):        print('booting the {}'.format(self))        self.state = State.running    def kill(self, restart=True):        print('killing {}'.format(self))        self.state = State.restart if restart else State.zombie    def create_process(self, user, name):#用于创建进程        print('trying to create the process {} for user {}'.format(name, user))#OperatingSystem类是一个外观class OperatingSystem:    def __init__(self):#__init__()方法中创建所有需要的服务进程        self.fs = FileServer()        self.ps = ProcessServer()    def start(self):#start()方法是系统的入口点,供客户端代码使用        [i.boot for i in (self.fs, self.ps)]    def create_file(self, user, name, permissions):        return self.fs.create_file(user, name, permissions)    def create_process(self, user, name):        return self.ps.create_process(user, name)def main():    os = OperatingSystem()    os.start()    os.create_file('duxu', 'file1', '-rw-r-r')    os.create_process('duxu', 'process1')if __name__ == '__main__':    main()----------输出:trying to create the file file1 for user duxu with permissions -rw-r-rtrying to create the process process1 for user duxu
原创粉丝点击