设计模式--第十章 外观模式

第一章 前言
第二章 观察者模式
第三章 状态模式
第四章 中介模式
第五章 装饰器模式
第六章 单例模式
第七章 克隆模式
第八章 职责链模式
第九章 代理模式
第十章 外观模式
第十一章 迭代模式
第十二章 组合模式
第十三章 构建模式
第十四章 适配模式
第十五章 策略模式
第十六章 简单工厂模式
第十七章 工厂方法模式
第十八章 抽象工厂模式
第十九章 命令模式
第二十章 备忘录模式
第二十一章 享元模式
第二十二章 访问模式
第二十三章 模板模式
第二十四章 桥接模式
第二十五章 解释器模式
第二十六章 过滤器模式
第二十七章 对象池技术
第二十八章 回调机制
第二十九章 MVC模式
附录



1. 核心思想

为子系统中的一组接口提供一个一致的界面称为外观模式,外观模式定义了一个高层接口,这个接口使得这―子系统更容易使用。

比如生活中的志愿者,他们相当于一个对接人,将复杂的业务通过一个对接人来提供一整套统一的(一条龙式的)服务,让用户不用关心内部复杂的运行机制。这种方式在程序中叫外观模式,也叫门面模式。

迎新志愿者陪同并帮助入学新生完成报到登记、缴纳学费、领日用品、入住宿舍等一系列的报到流程。新生不用知道具体的报到流程,不用去寻找各个场地;只要跟着志愿者走,到指定的地点,根据志愿者的指导,完成指定的任务即可。志愿者虽然不直接提供这些报到服务,但也相当于间接提供了报到登记、缴纳学费、领日用品、入住宿舍等条龙的服务,帮新生减轻了不少麻烦和负担。
外观模式的核心思想:用一个简单的接口来封装一个复杂的系统,使这个系统更容易使用。

2. UML类图

外观模式UML类图

3. 框架代码

import sys


class SubSystemA():
    def function(self):
        """子系统类A的功能函数,实现子系统A的功能,处理Facade对象指派的任务"""
        print(
            f"{self.__class__.__name__}/{sys._getframe().f_code.co_name} is running...")


class SubSystemB():
    def function(self):
        """子系统类B的功能函数,实现子系统B的功能,处理Facade对象指派的任务"""
        print(
            f"{self.__class__.__name__}/{sys._getframe().f_code.co_name} is running...")


class Facade():
    def __init__(self) -> None:
        self._subSystemA = SubSystemA()
        self._subSystemB = SubSystemB()

    def functionA(self):
        print(
            f"{self.__class__.__name__}/{sys._getframe().f_code.co_name} is running...")
        self._subSystemA.function()

    def functionB(self):
        print(
            f"{self.__class__.__name__}/{sys._getframe().f_code.co_name} is running...")
        self._subSystemB.function()


if __name__ == "__main__":
    facade = Facade()
    facade.functionA()
    print("-" * 50)
    facade.functionB()

4. 模型说明

.4.1 设计要点

外观模式是最简单的设计模式之一,只有以下两个角色:

  1. 外观角色(Facade):为子系统封装统一的对外接口,如同子系统的门面。这个类一般不负责具体的业务逻辑,只是一个委托类,具体的业务逻辑由子系统完成。
  2. 子系统(SubSystem):由多个类组成的具有某一特定功能的子系统。可以是第三方库,也可以是自己的基础库,还可以是一个子服务,为整个系统提供特定的功能或服务。

4.2 优缺点

  1. 优点:
    • 实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响调用它的客户端。
    • 简化了客户端对子系统的使用难度,客户端(用户)无须关心子系统的具体实现方式而只需要和外观进行交互即可。
    • 为不同的用户提供了统一的调用接口,方便了系统的管理和维护。
  2. 缺点:
    • 因为统一了调用的接口,降低了系统功能的灵活性。

5. 应用场景

  1. 要为一个复杂子系统提供一个简单接口时。
  2. 客户程序与多个子系统之间存在很大的依赖性时。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。
  3. 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值