JAVA语言设计模式之组合模式原理与用法详解
龚超 2018-07-25 来源 : 阅读 1692 评论 0

摘要:本文实例讲述了JAVA语言设计模式之组合模式。分享给大家供大家参考,希望对大家学习JAVA语言有所帮助。

本文实例讲述了JAVA语言设计模式之组合模式。分享给大家供大家参考,希望对大家学习JAVA语言有所帮助。 ,具体如下:

组合(整体与部分关系)模式:将不同但是相关的对象组合成树形结构以实现“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

* 模式角色组成:

1.Component对象: 是组合中的对象接口,是所有类共有的接口。是用于统一定义整体中的部分。

2.Leaf对象: 整体中的部分,没有下一级。

3.Composite对象: 用来存储子部件,在Component接口中实现与部分有关操作。

以公司构成为例,比如公司有总公司,总公司下有分公司,分公司下有办事处等。构成一个树形结构。


/**

* 抽象类:用来管理子类

* @description:

* @date 2016-1-22 下午1:16:25

*/

public abstract class Firm {

private String firmName;// 公司名称

public Firm(String firmName) {

this.firmName = firmName;

}

public String getFirmName() {

return firmName;

}

public void setFirmName(String name) {

this.firmName = name;

}

protected abstract void append(Firm firm);// 添加公司如:新增分公司

protected abstract void romove(Firm firm);// 删除公司:如因故关闭分公司

protected abstract void show(int level);//显示公司所在的层级:总公司,分公司,办事处等

}



复制代码


/**

* 分公司对象

* @description:

* @date 2016-1-22 下午1:25:43

*/

public class BranchFirm extends Firm {

private ListcList;

public BranchFirm(String name) {

super(name);

cList = new ArrayList();

}

@Override

protected void append(Firm firm) {

cList.add(firm);

}

@Override

protected void show(int depth) {

StringBuilder sb = new StringBuilder("");

for (int i = 0; i < depth; i++) {

sb.append("*");

}

System.out.println(new String(sb) + this.getFirmName());

for (Firm c : cList) {

c.show(depth + 2);

}

}

@Override

protected void romove(Firm firm) {

// TODO Auto-generated method stub

cList.remove(firm);

}

}



复制代码


/**

* Leaf结点类:公司市场部

* @description:

* @date 2016-1-22 下午1:46:02

*/

public class MarketDepartment extends Firm {

public MarketDepartment(String name) {

super(name);

}

@Override

protected void append(Firm company) {

}

@Override

protected void show(int depth) {

// TODO Auto-generated method stub

StringBuilder sb = new StringBuilder("");

for (int i = 0; i < depth; i++) {

sb.append("*");

}

System.out.println(new String(sb) + this.getFirmName());

}

@Override

protected void romove(Firm company) {

}

}



复制代码


/**

* Leaf结点类:公司技术部

* @description:

* @date 2016-1-22 下午1:21:41

*/

public class MinTechDepartment extends Firm {

public MinTechDepartment(String name) {

super(name);

}

@Override

protected void append(Firm firm) {

}

@Override

protected void show(int depth) {

StringBuilder sb = new StringBuilder("");

for (int i = 0; i < depth; i++) {

sb.append("*");

}

System.out.println(new String(sb) + this.getFirmName());

}

@Override

protected void romove(Firm company) {

}

}



复制代码


public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

Firm head = new BranchFirm("深圳XX集团有限公司");// 公司总部

head.append(new MarketDepartment("深圳XX集团有限公司--市场部"));

head.append(new MinTechDepartment("深圳XX集团有限公司--技术部"));

Firm jsFirm = new BranchFirm("深圳XX集团有限公司-江苏分公司");

jsFirm.append(new MarketDepartment("深圳XX集团有限公司-江苏分公司市场部"));

jsFirm.append(new MinTechDepartment("深圳XX集团有限公司-江苏分公司技术部"));

Firm szFirm = new BranchFirm("深圳XX集团有限公司-江苏分公司-苏州办事处");

szFirm.append(new MinTechDepartment("深圳XX集团有限公司-江苏分公司-苏州办事处技术部"));

szFirm.append(new MarketDepartment("深圳XX集团有限公司-江苏分公司-苏州办事处市场部"));

jsFirm.append(szFirm);

// 如果还需要新增分公司或办事处等,就继续按照上述操作处理

head.append(jsFirm);

head.show(0);

}

}



复制代码

通常:在需要表示对象的整体与部分层次结构或需要忽略组合的整体对象与部分对象的不同,统一地使用整体中的部门情况下来使用组合模式。

希望对JAVA有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言JAVA频道!

本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

擅长针对企业软件开发的产品设计及开发的细节与流程设计课程内容。座右铭:大道至简!

  • 370
    文章
  • 23301
    人气
  • 87%
    受欢迎度

已有23人表明态度,87%喜欢该老师!

进入TA的空间
求职秘籍 直通车
  • 索取资料 索取资料 索取资料
  • 答疑解惑 答疑解惑 答疑解惑
  • 技术交流 技术交流 技术交流
  • 职业测评 职业测评 职业测评
  • 面试技巧 面试技巧 面试技巧
  • 高薪秘笈 高薪秘笈 高薪秘笈
TA的其他文章 更多>>
WEB前端必须会的基本知识题目
经验技巧 93% 的用户喜欢
Java语言中四种遍历List的方法总结(推荐)
经验技巧 91% 的用户喜欢
Java语言之SHA-256加密的两种实现方法详解
经验技巧 75% 的用户喜欢
java语言实现把两个有序数组合并到一个数组的实例
经验技巧 75% 的用户喜欢
通过Java语言代码来创建view的方法
经验技巧 80% 的用户喜欢
其他海同师资 更多>>
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
孔庆琦
孔庆琦 联系TA
对MVC模式和三层架构有深入的研究
周鸣君
周鸣君 联系TA
擅长Hadoop/Spark大数据技术
范佺菁
范佺菁 联系TA
擅长Java语言,只有合理的安排和管理时间你才能做得更多,行得更远!
金延鑫
金延鑫 联系TA
擅长与学生或家长及时有效沟通
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程