门面模式

门面模式
1、结构型模式
描述如何将对象和类组合成更大的结构
-类模式:通过继承来描述抽象,从而提供更有用的程序接口
-对象模式:描述了如何将对象联系起来,从而组合成更大的对象

2、结构型模式例子:
适配器模式:将一个接口转换成客户希望的另一个接口,根据客户端的不同需求来匹配不同类的接口
桥接模式:将对象的接口与其实现进行解耦,使得两者可以独立工作
装饰器模式:允许在运行时或以动态方式为对象添加职责,通过接口给对象添加某些属性

3、门面模式facade
(1)为子系统中的一组接口,提供了一个统一的接口,
并定义一个高级接口来帮助客户端通过更加简单的方式来使用子系统
(2)门面所解决的问题,如何用单个接口对象表示复杂的子系统。
实际上并不是封装子系统,而是对底层子系统进行组合
(3)促进实现与客户端的解耦

4、3个主要参与者
(1)门面:将一组复杂的子系统封装起来,从而为外部世界提供一个舒适的外观
(2)系统:代表一组不同的子系统,使整个系统混杂在一起,难以观察或使用
(3)客户端:与门面交互,轻松的与子系统进行通信并完成工作,不必担心系统的复杂性

5、最少知识原则:减少对象之间的交互

6、代码示例

# -*- coding: utf-8 -*-


# 子系统
class Dog(object):
    def say_hi(self):
        print("汪汪汪...")


class Cat(object):
    def say_hi(self):
        print("喵喵喵...")


# 门面
class Zoo(object):
    def animal_say_hi(self):
        dog = Dog()
        dog.say_hi()

        cat = Cat()
        cat.say_hi()


# 客户端
class Visitor(object):
    def visit(self):
        zoo = Zoo()
        zoo.animal_say_hi()


if __name__ == '__main__':
    visitor = Visitor()
    visitor.visit()
    """
    汪汪汪...
    喵喵喵...
    """