欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第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类是外观类。用户想要启动,关闭,创建服务的 时候,只需要实例化它,然后让他去启动一些服务。。突然发现这跟代理模式有点渊源。不懂代理模式没关系,我们下一节更新。。。