ITPub博客

首页 > 数据库 > 数据库开发技术 > python 面向对象设计模式实践篇(9)-结构型:外观模式模式实践

python 面向对象设计模式实践篇(9)-结构型:外观模式模式实践

原创 数据库开发技术 作者:程序员小钟同学 时间:2021-03-25 15:14:39 0 删除 编辑

结构型模式概述

定义:前篇初期中,我们的讲过结构型模式主要解决的问题是:

  • 处理实体之间的关系,使得这些实体能够更好地协同工作
  • 结构型模式是类和对象的综合体

它具有的特性:

  • 1:设计过程注重通过组合获得更强大功能的对象和类的结构
  • 2:简化结构并识别类和对象之间的关系
  • 3:主要关注类的继承和组合
  • 4:通过类和对象的模式的

外观模式


所属分类

  • 结构型模式

意图

  • 给相关联相互依赖的子系统(组合关联的子类的功能实现合并成一个超类的功能)提供一个一致性的界面

  • 隔离内部系统,对外仅提供一个外观去,再外观类里统一所有子系统的操作。

角色对象

  • 外观类
  • 子系统类

核心的思想

  • 我把一推的子系统封装到一个系统里面,一键开机!

适用性

  • 构建一个层次结构的子系统,子系统之间是相互依赖,可以封装所有子系统整合到外观类,外部仅通过外观类进行通讯,简化它们之间的依赖关系。

实践


说明:

一个汽车要跑起来需要几个步骤,也依赖内部几个系统,那如何我一键开车让它跑起来呐?


class Lunzixitong:
    '''
    轮子系统
    '
''
    name = '轮子系统'

    def start(self):
        print('轮子系统开始工作!')

    def stop(self):
        print('轮子系统停止工作!')

class Yinjingxitong:
    '''
    引擎系统
    '
''
    name = '引擎系统'

    def start(self):
        print('引擎系统-开始工作!')

    def stop(self):
        print('引擎系统-停止工作!')


class Yeyaitong:
    '''
    液压系统
    '
''
    name = '液压系统'

    def start(self):
        print('液压系统-开始工作!')

    def stop(self):
        print('液压系统-停止工作!')


# 给上面所有的子系统套一个壳,组成一个车

class BaoMaCar:
    '''
    外观类
    '
''
    name = "宝马车"

    def __init__(self):
        # 组合所有子系统的对象
        self.yeya = Yeyaitong()
        self.yinqi = Yinjingxitong()
        self.lunzi = Lunzixitong()

    def start(self):
        # 启动内部的所有依赖的子系统
        self.yeya.start()
        self.yinqi.start()
        self.lunzi.start()
        print('子系统启动完毕---宝马车-开始工作!!!')


    def stop(self):
        self.yeya.stop()
        self.yinqi.stop()
        self.lunzi.stop()
        print('子系统停止完毕---宝马车-停止工作!')


if __name__ == '__main__':

    baoma  = BaoMaCar()
    baoma.start()
    baoma.stop()

输出结果:

液压系统-开始工作!
引擎系统-开始工作!
轮子系统开始工作!
子系统启动完毕---宝马车-开始工作!!!
液压系统-停止工作!
引擎系统-停止工作!
轮子系统停止工作!
子系统停止完毕---宝马车-停止工作!

外观模式比较简单,其实也很理解!这里不再详述!

优缺

  • 优点:应用于在层次化结构的代码中,外观类定义入口,子系统直接相互隔离。
  • 缺点:子系统和外观类强依赖,新增子系统需要修改外观类,违背了“开闭原则”。

个人其他博客地址

简书:https://www.jianshu.com/u/d6960089b087

掘金:https://juejin.cn/user/2963939079225608

小钟同学 | 文 【原创】| QQ:308711822

  • 1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。
  • 2:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。


原文作者:程序员小钟同学;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-02-20

  • 博文量
    224
  • 访问量
    111708