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>
目录
相关文章
|
人工智能 安全 算法
基于Aidlux平台实现真章假章相似度对比训练推理测试
在互联网内容安全风控领域,AI技术的应用对于提高管理的自动化程度和准确性具有重要意义。
283 0
|
数据采集 JSON 关系型数据库
将 MySQL 数据抽取并写入 DataHub,您可以按照以下步骤进行
将 MySQL 数据抽取并写入 DataHub,您可以按照以下步骤进行
860 2
|
10月前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
安全 项目管理
销售易对决红圈:CRM系统全方位比较与企业选择指南
本文对比分析了销售易和红圈两大国内领先的CRM解决方案。销售易以全球领先的产品能力和全面的营销销售流程管理著称,深受500强企业信赖;红圈则以其专业的客户服务和丰富的项目管理经验见长,特别适合工程项目管理。两者各具优势,企业可根据自身需求选择最合适的CRM系统。
|
存储 弹性计算 固态存储
阿里云服务器租用收费价格,X86计算架构云服务器收费标准参考
X86计算架构阿里云服务器有通用算力型u1、通用型g7、共享标准型s6、计算型c7、通用型g8i、计算型c8i等实例规格可选,不同实例规格的租用收费价格是不一样的,本文为大家汇总了目前基于X86计算架构下的各个实例规格的阿里云服务器收费标准,以供参考。
阿里云服务器租用收费价格,X86计算架构云服务器收费标准参考
|
文字识别
阿里云商标智能注册275元费用价格、注册流程图文详解
阿里云商标智能注册275元包含10个项目,每多一项加收32元。阿里云商标智能注册申请流程包括商标基本信息填写、商标申请人填写等
1945 1
阿里云商标智能注册275元费用价格、注册流程图文详解
|
机器学习/深度学习 自然语言处理 达摩院
语音识别技术|学习笔记
快速学习语音识别技术
752 0
语音识别技术|学习笔记
干货!layerGroup在LeafLet中的实战
需求场景:boss想针对分子公司进行统一展示,有可能在地图上统一添加、移除、统一调整图标等操作。常规做法可以采用遍历法,去循环所有的marker,批量操作。此时,可以采用layerGroup的方式,将所有分子公司存放在一个layer中,通过分组,可以批量操作存放在layerGroup中
962 0
干货!layerGroup在LeafLet中的实战
|
SpringCloudAlibaba Cloud Native Dubbo
【云原生】Spring Cloud Alibaba 之 Feign 远程调用 实战
分布式系统下远程调用该如何选择?RestTemplate 与 Feign,Feign是最佳选择!
1070 0
【云原生】Spring Cloud Alibaba 之 Feign 远程调用 实战