组合模式:将对象组合成树形结构以表示“整体-部分”的层次关系。组合使得用户对单个对象和复合对象的使用具有一致性。
组合模式的关键的就是,组件和组合的整体具有一个共同的基类。
from abc import ABCMeta,abstractmethod
class CompterCompoent(metaclass=ABCMeta):
def __init__(self,name):
self._name = name
@abstractmethod
def showInfo(self):
pass
class CPU(CompterCompoent):
def __init__(self,name):
super().__init__(name)
def showInfo(self):
print("高端CPU")
class MemoryCard(CompterCompoent):
def __init__(self,name):
super().__init__(name)
def showInfo(self):
print("高级内存条")
class HardDisk(CompterCompoent):
def __init__(self,name):
super().__init__(name)
def showInfo(self):
print("1T的大硬盘")
class GraphCard(CompterCompoent):
def __init__(self,name):
super().__init__(name)
def showInfo(self):
print("高级显卡")
class ComputerComposite(CompterCompoent):
def __init__(self,name):
super().__init__(name)
self._compoents =[]
def showInfo(self):
print("%s由以下部分组成"%(self._name))
for element in self._compoents:
element.showInfo()
def addComponent(self,component):
self._compoents.append(component)
class Computer(ComputerComposite):
def __init__(self,name):
super().__init__(name)
def showInfo(self):
print("我是电脑:")
super().showInfo()
def test():
computer = Computer("IBM")
cpu = CPU("I7")
computer.addComponent(cpu)
memory = MemoryCard("内存条")
computer.addComponent(memory)
hardDisk = HardDisk("硬盘")
computer.addComponent(hardDisk)
graphCard = GraphCard("显卡")
computer.addComponent(graphCard)
computer.showInfo()
test();
运行结果:
我是电脑:
IBM由以下部分组成
高端CPU
高级内存条
1T的大硬盘
高级显卡
aaa