JAVA设计模式之组合模式原理与用法详解
本文实例讲述了JAVA设计模式之组合模式。分享给大家供大家参考,具体如下:
组合(整体与部分关系)模式:将不同但是相关的对象组合成树形结构以实现“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
*模式角色组成:
1.Component对象:是组合中的对象接口,是所有类共有的接口。是用于统一定义整体中的部分。
2.Leaf对象:整体中的部分,没有下一级。
3.Composite对象:用来存储子部件,在Component接口中实现与部分有关操作。
以公司构成为例,比如公司有总公司,总公司下有分公司,分公司下有办事处等。构成一个树形结构。
/** *抽象类:用来管理子类 *@description: *@date2016-1-22下午1:16:25 */ publicabstractclassFirm{ privateStringfirmName;//公司名称 publicFirm(StringfirmName){ this.firmName=firmName; } publicStringgetFirmName(){ returnfirmName; } publicvoidsetFirmName(Stringname){ this.firmName=name; } protectedabstractvoidappend(Firmfirm);//添加公司如:新增分公司 protectedabstractvoidromove(Firmfirm);//删除公司:如因故关闭分公司 protectedabstractvoidshow(intlevel);//显示公司所在的层级:总公司,分公司,办事处等 }
/** *分公司对象 *@description: *@date2016-1-22下午1:25:43 */ publicclassBranchFirmextendsFirm{ privateListcList; publicBranchFirm(Stringname){ super(name); cList=newArrayList (); } @Override protectedvoidappend(Firmfirm){ cList.add(firm); } @Override protectedvoidshow(intdepth){ StringBuildersb=newStringBuilder(""); for(inti=0;i /** *Leaf结点类:公司市场部 *@description: *@date2016-1-22下午1:46:02 */ publicclassMarketDepartmentextendsFirm{ publicMarketDepartment(Stringname){ super(name); } @Override protectedvoidappend(Firmcompany){ } @Override protectedvoidshow(intdepth){ //TODOAuto-generatedmethodstub StringBuildersb=newStringBuilder(""); for(inti=0;i /** *Leaf结点类:公司技术部 *@description: *@date2016-1-22下午1:21:41 */ publicclassMinTechDepartmentextendsFirm{ publicMinTechDepartment(Stringname){ super(name); } @Override protectedvoidappend(Firmfirm){ } @Override protectedvoidshow(intdepth){ StringBuildersb=newStringBuilder(""); for(inti=0;i publicclassTest{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Firmhead=newBranchFirm("深圳XX集团有限公司");//公司总部 head.append(newMarketDepartment("深圳XX集团有限公司--市场部")); head.append(newMinTechDepartment("深圳XX集团有限公司--技术部")); FirmjsFirm=newBranchFirm("深圳XX集团有限公司-江苏分公司"); jsFirm.append(newMarketDepartment("深圳XX集团有限公司-江苏分公司市场部")); jsFirm.append(newMinTechDepartment("深圳XX集团有限公司-江苏分公司技术部")); FirmszFirm=newBranchFirm("深圳XX集团有限公司-江苏分公司-苏州办事处"); szFirm.append(newMinTechDepartment("深圳XX集团有限公司-江苏分公司-苏州办事处技术部")); szFirm.append(newMarketDepartment("深圳XX集团有限公司-江苏分公司-苏州办事处市场部")); jsFirm.append(szFirm); //如果还需要新增分公司或办事处等,就继续按照上述操作处理 head.append(jsFirm); head.show(0); } }通常:在需要表示对象的整体与部分层次结构或需要忽略组合的整体对象与部分对象的不同,统一地使用整体中的部门情况下来使用组合模式。
更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。