设计模式---组合模式

组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
这里写图片描述
在Component中申明所有用来管理子对象的方法,Add,Remove等。这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处就是叶子节点和枝干节点对于外界没有区别,它们具备完全一致的行为接口。

需求中体现部分与整体层次结构时,而且希望忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式。

Python示例:

from abc import ABCMeta, abstractmethod

class AbsDepartment():
    __metaclass__ = ABCMeta

    @abstractmethod
    def Work(self):
        pass
    @abstractmethod
    def Add(self):
        pass
    @abstractmethod
    def Del(self):
        pass

class IndependentDepartment(AbsDepartment):

    def __init__(self,Name,WorkDetail):
        self._Name=Name
        self._WorkDetail=WorkDetail
    def Work(self):
        print self._Name + 'wrok:'  + self._WorkDetail   
    def Add(self):
        print 'IndependentDepartment Can not Add Sub'
    def Del(self):
        print 'IndependentDepartment Can no Del Sub'

class DepartMent(AbsDepartment):
    def __init__(self,Name,WorkDetail):
        self._Name = Name
        self._WorkDetail = WorkDetail
        self._SubDepartMent=[]

    def Add(self,ObjDepartMent):
        self._SubDepartMent.append(ObjDepartMent)
    def Del(self,ObjDepartMent):
        self._SubDepartMent.remove(ObjDepartMent)
    def Work(self):
        print self._Name+'work:'+self._WorkDetail
        for DepartMent in self._SubDepartMent:
            DepartMent.Work()

ZTE = DepartMent('中兴通讯','生产通讯设备')      
SmartPhoneDept =IndependentDepartment('--手机事业部','生产手机')
WireLess = DepartMent('--无线院','研发无线产品')

ZTE.Add(SmartPhoneDept)
ZTE.Add(WireLess)

UMTSTestingDept=IndependentDepartment('----UMTS基站测试部','基站测试')
UMTSSoftDept=IndependentDepartment('----UMTS基站软件部','基站软件开发')

WireLess.Add(UMTSTestingDept)
WireLess.Add(UMTSSoftDept)

程序执行效果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值