ITPub博客

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

python 面向对象设计模式实践篇(10)-结构型:组合模式实践

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

结构型模式概述

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

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

它具有的特性:

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

组合模式


所属分类

  • 结构型模式

意图

  • 将对象组合成树形结构以表示“部分-整体”的层次结构
  • 使用户对单个对象和组合对象的使用具有一致性。

角色对象

  • 抽象组件(Component)
  • 叶子组件(leaf)
  • 复合组件(Composite)
  • 客户端(Client)

核心的思想

  • 将对象组合成树形结构

模式应用优势

  • 树形结构对节点增加和减少比较灵活
  • 树形结构中所有节点不管是分支节点还是叶子结点都可以相互调用。
  • 节点增加或减少不影响到整个树形结构构成

适用性:

  • 想表示对象的部分-整体层次结构。

  • 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

实践

说明:

一个变形金刚是由许许多多的部件组合而成。既然是变形,那各个组件之间可以有着不同的组合,新的组件还可以继续组合其他子组件,又构成另类的新的组件。

所有第一步定义我们的抽象组件:

#!/usr/bin/evn python
# coding=utf-8


from abc import ABCMeta, abstractmethod


class BasePart(metaclass=ABCMeta):
    '''
    抽象零件组件
    '
''

    @abstractmethod
    def make(self): pass


class Tou(BasePart):
    '''
    叶子组件
    '
''

    def make(self):
        print('变形金刚--头组件')




class Boby(BasePart):
    '''
    叶子组件
    '
''

    def make(self):
        print('变形金刚--身体组件')


class Shou(BasePart):
    '''
    叶子组件
    '
''

    def make(self):
        print('变形金刚--手组件')


class Jiao(BasePart):
    '''
    叶子组件
    '
''

    def make(self):
        print('变形金刚--脚组件')




class BianxingJingang(BasePart):
    '''
    复合组件----完整的一个简陋版本的变形金刚
    '
''

    def __init__(self, zujian=[]):
        self.children = zujian

    def add(self,basePart):
        # 添加部件
        self.children.append(basePart)

    def make(self):
        print('变形金刚---开始制作')
        for gin in self.children:
            gin.make()
        print('变形金刚---制作完成=====================')


# 头组件对象
# 上本身==========
print("*"*30)
# 第一代的变形金刚自有头和两个手
jingang1 = BianxingJingang([Tou(),Shou(),Shou()])
jingang1.make()
print("*"*30)
# 第二代的变形金刚自有头和两个手
jingang2 = BianxingJingang([Tou(),Shou(),Shou(), Boby(),Jiao(),Jiao()])
jingang2.make()
print("*"*40)
# 第三代= 第一个代+第二代组合而成
jingang3 = BianxingJingang([jingang1,jingang2])
jingang3.make()


上面的代码展示了:所有的 叶子组件随意的组合和添加,甚至可以新增,他们之前相互的不影响。

个人其他博客地址

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

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

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

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


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

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

注册时间:2021-02-20

  • 博文量
    224
  • 访问量
    111714