Java设计模式之--组合模式(Composite Pattern)
来源:互联网 发布:大连网络买花花店 编辑:程序博客网 时间:2024/05/23 17:36
概念:
组合模式(Composite Pattern)
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
组合模式经典案例:系统目录结构,网站导航结构等。
其类结构图如下:
案例,现规划方案实现某科技公司业务部门结构
代码:
部门类:
public abstract class Depat { private String name; private List<Depat> subDepat; private Depat parent; public abstract Depat addSubDepatment(Depat depasub); public abstract Depat removeSubDepatment(Depat depasub); public abstract Depat display(); public Depat() { } public Depat(String depatname) { setName(depatname); } public Depat getParent() { return parent; } public void setParent(Depat parent) { this.parent = parent; } public List<Depat> getSubDepat() { return subDepat; } public void setSubDepat(List<Depat> subDepat) { this.subDepat = subDepat; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
public class Depatment extends Depat{ public Depatment() { super(); setSubDepat(new ArrayList<Depat>()); } public Depatment(String depatmentname) { super(depatmentname); setSubDepat(new ArrayList<Depat>()); } @Override public Depat addSubDepatment(Depat depasub) { depasub.setParent(this); getSubDepat().add(depasub); return this; } @Override public Depat removeSubDepatment(Depat depasub) { depasub.setParent(null); getSubDepat().remove(depasub); return this; } @Override public Depat display() { System.out.println(String.format("%s", this.getName())); for(Depat depat : getSubDepat()){ depat.display(); } return this; }
}
Company类
public class Company { Depatment root = null; public Depatment getRoot() { return root; } public void setRoot(Depatment root) { this.root = root; } public Company(String Name) { root = new Depatment(Name); }}
测试类:
public class WorkClass { public void test() { Company company = new Company("某科技公司"); company.getRoot().addSubDepatment( new Depatment("笔电大部"). addSubDepatment(new Depatment("笔电硬件研发部"). addSubDepatment(new Depatment("笔电硬件北京研发部")). addSubDepatment(new Depatment("笔电硬件深圳研发部"))). addSubDepatment(new Depatment("笔电软件研发部"). addSubDepatment(new Depatment("笔电软件杭州研发部")). addSubDepatment(new Depatment("笔电软件苏州研发部")))) .addSubDepatment( new Depatment("手机大部"). addSubDepatment(new Depatment("手机硬件研发部"). addSubDepatment(new Depatment("手机硬件北京研发部")). addSubDepatment(new Depatment("手机硬件深圳研发部"))). addSubDepatment(new Depatment("手机软件研发部"). addSubDepatment(new Depatment("手机软件杭州研发部")). addSubDepatment(new Depatment("手机软件苏州研发部")))); company.getRoot().display(); }}
输出:
06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 某科技公司06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 笔电大部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 笔电硬件研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 笔电硬件北京研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 笔电硬件深圳研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 笔电软件研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 笔电软件杭州研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 笔电软件苏州研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 手机大部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 手机硬件研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 手机硬件北京研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 手机硬件深圳研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 手机软件研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 手机软件杭州研发部06-21 09:19:32.954 12750-12750/com.example.qinghua_liu.myapplication I/System.out: 手机软件苏州研发部
结语:
组合模式(Composite Pattern)它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念 ,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递 归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。
0 0
- 设计模式之组合模式(Composite Pattern)
- 设计模式之组合模式(Composite Pattern)
- 设计模式之组合模式(Composite Pattern)
- 设计模式之组合模式---Composite Pattern
- 设计模式之组合模式(Composite Pattern)
- Java设计模式--组合模式【Composite Pattern】
- JAVA设计模式之 组合模式【Composite Pattern】
- Java设计模式之--组合模式(Composite Pattern)
- Java Composite Pattern(组合模式)
- java设计模式之组合模式Composite
- net设计模式实例之组合模式(Composite Pattern)
- Php设计模式之【组合模式Composite Pattern】
- 设计模式之组合模式(Composite Pattern)
- C#设计模式之组合模式(Composite Pattern)
- 设计模式(结构型)之组合模式(Composite Pattern)
- 设计模式之----组合模式(Composite Design Pattern)
- 设计模式总结之Composite Pattern(组合模式)
- Net设计模式实例之组合模式(Composite Pattern)
- iOS下微信语音播放之切换听筒和扬声器的方法解决方案
- iOS用户是否开启定位服务
- Android Apk自动更新service(直接拿来用)
- 【代码笔记】iOS-网络嗅探
- 谷歌zxing实现二维码生成和解析_http://kesun-shy.iteye.com/blog/2154169
- Java设计模式之--组合模式(Composite Pattern)
- iOS支付宝支付
- 7-3Math对象
- iOS利用AFNetworking(AFN) 实现图片上传
- 内部锁与同步
- stm8使用atomthreads项目
- uname -a了解
- Makefile 使用总结
- Redis配置文件详解