• 【Python笔记-设计模式】外观模式


    一、说明

    外观模式是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个统一的接口。

    (一) 解决问题

    简化复杂系统的接口调用

    (二) 使用场景

    • 简化复杂系统:需要一个指向复杂子系统的直接接口, 且该接口的功能有限时
    • 重构复杂的代码:当系统中存在复杂的代码结构,并且需要重构时,可以使用外观模式来重新设计接口,使得系统更易于理解和维护。
    • 遗留系统的封装:对于遗留系统,可能存在复杂的接口和实现细节,可以使用外观模式来封装这些细节,提供更简单的接口给新系统使用。

    二、结构

    1. 外观(Facade)提供了一种访问特定子系统功能的便捷方式,其了解如何重定向客户端请求,知晓如何操作一切活动部件。
    2. 创建附加外观(Additional Facade)类可以避免多种不相关的功能污染单一外观,使其变成又一个复杂结构。客户端和其他外观都可使用附加外观。
    3. 复杂子系统(Complex Subsystem)由数十个不同对象构成。如果要用这些对象完成有意义的工作,你必须深入了解子系统的实现细节,比如按照正确顺序初始化对象和为其提供正确格式的数据。子系统类不会意识到外观的存在,它们在系统内运作并且相互之间可直接进行交互。
    4. 客户端(Client)使用外观代替对子系统对象的直接调用。

    三、伪代码

    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. __doc__ = """
    4. 外观模式
    5. 例:家庭影院系统,包含多个子系统,如投影仪、灯光、屏幕等。通过外观类,客户端只需关注 打开/关闭观影模式,无需关注内部子系统细节。
    6. """
    7. class Projector:
    8. """子系统类 - 投影仪"""
    9. def on(self):
    10. print("- 投影仪开启")
    11. def off(self):
    12. print("- 投影仪关闭")
    13. def play(self):
    14. print("- 投影仪播放影片")
    15. class Lights:
    16. """子系统类 - 灯光"""
    17. def dim(self):
    18. print("- 灯光调暗")
    19. def brighten(self):
    20. print("- 灯光调亮")
    21. class AudioSystem:
    22. """子系统类 - 音响"""
    23. def on(self):
    24. print("- 音响开启")
    25. def off(self):
    26. print("- 音响关闭")
    27. def play(self):
    28. print("- 音响播放音乐")
    29. class HomeTheaterFacade:
    30. """外观类 - 家庭影院外观"""
    31. def __init__(self):
    32. self.projector = Projector()
    33. self.lights = Lights()
    34. self.audio_system = AudioSystem()
    35. def watch_movie(self):
    36. self.projector.on()
    37. self.lights.dim()
    38. self.audio_system.on()
    39. self.projector.play()
    40. def end_movie(self):
    41. self.projector.off()
    42. self.lights.brighten()
    43. self.audio_system.off()
    44. if __name__ == "__main__":
    45. """
    46. 打开观影模式...
    47. - 投影仪开启
    48. - 灯光调暗
    49. - 音响开启
    50. - 投影仪播放影片
    51. 关闭观影模式...
    52. - 投影仪关闭
    53. - 灯光调亮
    54. - 音响关闭
    55. """
    56. home_theater = HomeTheaterFacade()
    57. print("打开观影模式...")
    58. home_theater.watch_movie()
    59. print()
    60. print("关闭观影模式...")
    61. home_theater.end_movie()

    四、优缺点

    优点

    • 简化接口:外观模式提供了一个统一的接口,隐藏了系统的复杂性,使得客户端更容易使用系统。
    • 提高安全性:外观模式可以将复杂的操作封装起来,对外只暴露简单的接口,提高了系统的安全性。

    缺点

    • 不符合开闭原则:外观模式在添加新的子系统或者修改子系统时,可能需要修改外观类,不符合开闭原则。

     跳转主页:【Python笔记】设计模式-CSDN博客

  • 相关阅读:
    模拟电子技术(五)放大电路中的反馈
    AI教程视频《AI illustrator入门到精通》零基础自学教程教学
    css实现波浪纹
    C和指针 第12章 使用结构和指针 12.7 问题
    【Linux】Systemd中的 target 是什么?有什么用?如何使用?
    使用标准信号检测 VM振弦采集模块测量精度
    Linux文本三剑客
    Kylin服务器版本桌面版本在接串口日志时出现问题的排查方向
    python+django_vue旅游酒店预订出行订票系统pycharm项目lw
    一文带你拿捏分支和循环语句(一万字详细讲解)
  • 原文地址:https://blog.csdn.net/weixin_44904331/article/details/136216226