设计模式---组合模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdhellfire/article/details/78682242

组合模式(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)

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

猜你喜欢

转载自blog.csdn.net/jdhellfire/article/details/78682242