设计模式---组合模式

来源:互联网 发布:xml json yml 编辑:程序博客网 时间:2024/05/16 16:06

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

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

Python示例:

from abc import ABCMeta, abstractmethodclass AbsDepartment():    __metaclass__ = ABCMeta    @abstractmethod    def Work(self):        pass    @abstractmethod    def Add(self):        pass    @abstractmethod    def Del(self):        passclass 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)

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

原创粉丝点击