Python设计模式 -组合模式

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

组合模式的关键的就是,组件和组合的整体具有一个共同的基类。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值