摘要:本文实例讲述了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 List
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频道!
擅长针对企业软件开发的产品设计及开发的细节与流程设计课程内容。座右铭:大道至简!
已有23人表明态度,87%喜欢该老师!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号