结构型设计模式-外观(facade)模式 - python实现

设计模式汇总:查看

通俗示例

想象一下你去餐厅吃饭,当你坐下后,服务员会为你提供菜单,并负责帮你点菜,通知厨房烹饪,最后将食物端给你。在整个过程中,你不需要直接和厨师、洗碗工或其他餐厅工作人员打交道,服务员在这里就充当了一个“外观”的角色,简化了整个用餐过程。

通俗解释

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,简化了客户端的使用。它就像一个中介,客户端只需要和这个中介交互,而中介则负责与子系统中的各个部分进行交互。

在外观模式中,通常涉及以下角色:

  1. 外观(Facade):提供了一个统一的接口,客户端通过这个接口与子系统进行交互。
  2. 子系统(Subsystem):实现了具体的业务逻辑,通常包含多个模块,这些模块的接口可能会比较复杂。
  3. 客户端(Client):通过外观提供的接口使用子系统。

外观模式的优点

  • 简化接口:外观模式提供了一个简化的接口,使得子系统更加容易使用。
  • 降低耦合度:客户端与子系统之间的耦合度降低,客户端不需要了解子系统的内部实现。
  • 提高可维护性:修改子系统的内部实现不会影响到客户端,只需要修改外观类即可。

Python代码示例

以下是一个外观模式的简单实现,以家庭影院系统为例:

class AlarmSensor:
    def run(self):
        print("Alarm Ring...")


class WaterSprinker:
    def run(self):
        print("Spray Water...")


class EmergencyDialer:
    def run(self):
        print("Dial 119...")


class EmergencyFacade:
    """
    外观类中封装了对子系统的操作
    """
    def __init__(self):
        self.alarm_sensor = AlarmSensor()
        self.water_sprinker = WaterSprinker()
        self.emergency_dialer = EmergencyDialer()

    def runAll(self):
        self.alarm_sensor.run()
        self.water_sprinker.run()
        self.emergency_dialer.run()


# 当模块作为主程序运行时,执行以下代码
if __name__ == "__main__":
    # 初始化紧急情况Facade(外观模式)对象,负责协调和管理紧急响应系统的各个部分
    emergency_facade = EmergencyFacade()
    # 启动紧急响应系统,执行所有的紧急响应流程
    emergency_facade.runAll()

这段代码定义了四个类:AlarmSensor、WaterSprinker、EmergencyDialer 和 EmergencyFacade。其中:

  • AlarmSensor 类有一个方法 run,功能是打印 “Alarm Ring…”,模拟报警器响铃。
  • WaterSprinker 类的 run 方法打印 “Spray Water…”,模拟喷水器喷水。
  • EmergencyDialer 类的 run 方法打印 “Dial 119…”,模拟自动拨打火警电话。

EmergencyFacade 封装了复杂操作,当有紧急情况下,执行所有的紧急响应流程。

总结

外观模式适用于简化复杂系统的接口,它将客户端与子系统之间的复杂交互封装在一个简单的接口后面,使得系统更加易于使用和维护。外观模式在软件开发中广泛使用,特别是在设计复杂的库和框架时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值