外观模式

定义

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

动机

将一个系统划分成为若干个子系统有利于降低系统的复杂性。

适用性

  • 当你要为一个复杂子系统提供一个简单接口时。
  • 客户程序与抽象类的实现部分之间存在着很大的依赖性。
  • 当你需要构建一个层次结构的子系统时,使用 Facade 模式定义子系统中每层的入口点 。

实现

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class HardWare(object):
    def power_on(self):
        print('上电')

    def bootloader(self):
        print('bootloader 启动')

    def power_off(self):
        print('断电')


class OperatingSystem(object):
    def load_kernel(self):
        print('加载内核')

    def load_image(self):
        print('加载镜像')

    def exit_os(self):
        print('退出操作系统')


class SoftWare(object):
    def load_app(self):
        print('加载应用程序')

    def exit_app(self):
        print('退出应用程序')


class Computer(object):
    def __init__(self):
        self.hw = HardWare()
        self.os = OperatingSystem()
        self.sw = SoftWare()

    def boot(self):
        self.hw.power_on()
        self.hw.bootloader()
        self.os.load_kernel()
        self.os.load_image()
        self.sw.load_app()

    def shut_down(self):
        self.sw.exit_app()
        self.os.exit_os()
        self.hw.power_off()


if __name__ == '__main__':
    computer = Computer()

    print('开机')
    computer.boot()

    print('\n关机')
    computer.shut_down()