定义:前篇初期中,我们讲过结构型模式主要解决的问题是:
它具有的特性:
想表示对象的部分-整体层次结构。
希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
说明:
一个变形金刚是由许许多多的部件组合而成。既然是变形,那各个组件之间可以有着不同的组合,新的组件还可以继续组合其他子组件,又构成另类的新的组件。
所有第一步定义我们的抽象组件:
#!/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:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。
原文作者:程序员小钟同学;如有侵权,请联系管理员删除。