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>
目录
相关文章
|
4月前
|
供应链 BI
OA、CRM、ERP,到底有啥区别?
本文深入解析了企业在数字化过程中常见的OA、CRM、ERP三大系统的功能与选型逻辑。OA系统聚焦内部流程与员工管理,适用于考勤、报销等行政事务;CRM专注客户与销售管理,适合需要跟进客户、提升成交率的企业;ERP则侧重企业核心业务,如采购、库存、财务等。文章结合企业不同发展阶段和关注重点,给出了系统的优先级选择建议,帮助企业明确数字化转型的路径。
|
11月前
|
数据采集 前端开发 物联网
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
本文介绍了一个基于多模态大模型的医疗图像诊断项目。项目旨在通过训练一个医疗领域的多模态大模型,提高医生处理医学图像的效率,辅助诊断和治疗。作者以家中老人的脑部CT为例,展示了如何利用MedTrinity-25M数据集训练模型,经过数据准备、环境搭建、模型训练及微调、最终验证等步骤,成功使模型能够识别CT图像并给出具体的诊断意见,与专业医生的诊断结果高度吻合。
21338 162
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
|
前端开发 JavaScript 算法
前端(七)——React框架的定位与应用场景解析
前端(七)——React框架的定位与应用场景解析
1030 0
|
SoC
PCIe EA (Enhanced Allocation) 介绍
PCIe EA (Enhanced Allocation) 介绍
627 0
PCIe EA (Enhanced Allocation) 介绍
|
机器学习/深度学习 供应链 算法
滴滴出行 路径规划算法工程师 面经
滴滴出行 路径规划算法工程师 面经
311 0
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
265 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~