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:设计模式之代理模式
113 0
|
设计模式 uml C++
Python 设计模式:适配器模式
适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。通过组合对象的方式来创建新功能。
Python 设计模式:适配器模式
|
NoSQL Linux
Linux系统调试篇——核心转储(core dump)
Linux系统调试篇——核心转储(core dump)
|
JavaScript 数据安全/隐私保护
中岩培训 某讯云 m3u8二次加密key分析
中岩培训 某讯云 m3u8二次加密key分析
中岩培训 某讯云 m3u8二次加密key分析
|
Rust 自然语言处理 算法
【算法】1791. 找出星型图的中心节点(多语言实现)
有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。 给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。
【算法】1791. 找出星型图的中心节点(多语言实现)
|
存储 JSON 数据库
Room数据库 -- TypeConverter简单理解
Room数据库 -- TypeConverter简单理解
518 0
Room数据库 -- TypeConverter简单理解
|
存储 JavaScript 前端开发
JavaScript | 让数组扁平化的三个方法!
我们在平时写程序的时候是不是都会遇到一种问题,面对嵌套层级很多的数组,我们看着就非常反感,想给它变成就单纯的一层数组,或者简化掉它的层级结构,使得它变成我们想要的样子。 所以,数组扁平化,他来了!
|
jenkins Java Linux
centerOS 重装jenkins
centerOS 重装jenkins
370 0
下一篇
无影云桌面