外观模式概念:

        为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易维护。。大话来讲:就是封装,内部系统太复杂,为用户抽象出一个接口。。

案例一:

      试想想你的电脑,你知道各种服务内部是怎样启动的吗?  你知道电脑从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类是外观类。用户想要启动,关闭,创建服务的 时候,只需要实例化它,然后让他去启动一些服务。。突然发现这跟***模式有点渊源。不懂***模式没关系,我们下一节更新。。。