Python:设计模式之门面模式

简介: Python:设计模式之门面模式

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()
    """
    汪汪汪...
    喵喵喵...
    """

参考

《Python设计模式第2版》第四章 门面模式


            </div>
目录
相关文章
|
设计模式 Python
Python:设计模式之门面模式
Python:设计模式之门面模式
89 0
|
设计模式 算法 Python
Python:设计模式之模板模式
Python:设计模式之模板模式
59 0
|
设计模式 缓存 数据库连接
Python:设计模式之代理模式
Python:设计模式之代理模式
80 0
|
设计模式 uml C++
Python 设计模式:适配器模式
适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。通过组合对象的方式来创建新功能。
Python 设计模式:适配器模式
|
存储 消息中间件 NoSQL
redis实现分布式延时队列
redis实现分布式延时队列
189 0
|
机器学习/深度学习 算法 数据处理
【机器学习】(18)使用sklearn实现交叉验证
【机器学习】(18)使用sklearn实现交叉验证
389 0
【机器学习】(18)使用sklearn实现交叉验证
|
机器学习/深度学习 传感器 算法
基于Sinusoidal混沌映射的麻雀搜索算法求解单目标优化问题附matlab代码
基于Sinusoidal混沌映射的麻雀搜索算法求解单目标优化问题附matlab代码
|
存储 C语言
|
监控 NoSQL 网络协议
Redis 开发陷阱及避坑指南!
Linux 配置优化 我们在使用 Redis 过程中,可能更多的关注 Redis 本身的一些配置优化,如 AOF、RDB 配置、数据结构配置优化等。 但是很少关心 Redis 的载体,服务器的优化。而这往往为我们的项目运行带来灾难性的打击。因此服务器优化也是必不可少的。
117 0
Redis 开发陷阱及避坑指南!