设计模式-结构型- 组合模式(Composite)
来源:互联网 发布:北大青鸟软件培训 编辑:程序博客网 时间:2024/05/29 09:05
定义
将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性
角色
抽象构件角色(Component):声明一个接口用于访问和管理Component子部件
树叶构件角色(Leaf):在组合中表示叶子结点没有子结点
树枝构件角色(Composite):定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(Add)和删除(Remove)等
客户角色(Client):通过Component接口操纵组合部件的对象
优点
- 组合模式可以很容易的增加新的构件
- 使用组合模式可以使客户端变的很容易设计,因为客户端可以对组合和叶节点一视同仁
缺点
- 使用组合模式后,控制树枝构件的类型不太容易
- 用继承的方法来增加新的行为很困难
适用场景
- 表示对象的部分-整体层次结构
- 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象
类图
package com.vapy.structure.Composite;/** * * @author vapy 2016年10月8日 * * 抽象构件角色 * */public abstract class StoreFront { protected String storeName; public String getStoreName() { return storeName; } public abstract void add(StoreFront store); public abstract void remove(StoreFront store); // 刷卡 public abstract void payByCard();}
package com.vapy.structure.Composite;import java.util.ArrayList;import java.util.List;/** * * @author vapy 2016年10月8日 * * 树枝构件角色 * */public class StoreOrBranch extends StoreFront { public StoreOrBranch() { } public StoreOrBranch(String storeName) { this.storeName = storeName; } List<StoreFront> myStoreList = new ArrayList<StoreFront>(); @Override public void add(StoreFront store) { myStoreList.add(store); } @Override public void remove(StoreFront store) { myStoreList.remove(store); } @Override public void payByCard() { System.out.println(storeName + "店的积分已累加进该会员卡"); for(StoreFront sf : myStoreList) { sf.payByCard(); } }}
package com.vapy.structure.Composite;import sun.reflect.generics.reflectiveObjects.NotImplementedException;/** * * @author vapy 2016年10月8日 * * 树叶构件角色 * */public class JoinInStore extends StoreFront { public JoinInStore() { } public JoinInStore(String storeName) { this.storeName = storeName; } @Override public void add(StoreFront store) { throw new NotImplementedException(); } @Override public void remove(StoreFront store) { throw new NotImplementedException(); } @Override public void payByCard() { System.out.println(storeName + "店的积分已累加进该会员卡"); }}
package com.vapy.structure.Composite;/** * * @author vapy 2016年10月8日 * * 客户角色 * */public class Client { public static void main(String[] args) { StoreOrBranch store = new StoreOrBranch("朝阳总店"); StoreOrBranch brach = new StoreOrBranch("东城分店"); JoinInStore jstore1 = new JoinInStore("东城加盟店一"); JoinInStore jstore2 = new JoinInStore("东城加盟店二"); brach.add(jstore1); brach.add(jstore2); store.add(brach); store.payByCard(); }}
本文代码可在github查看:点击此处
0 0
- 结构型设计模式---组合模式(Composite)
- 设计模式(七)组合模式Composite(结构型)
- 设计模式(七)组合模式Composite(结构型)
- 设计模式(七)组合模式Composite(结构型)
- 设计模式(九)组合模式(Composite)-结构型
- 设计模式(七)组合模式Composite(结构型)
- 设计模式(3)-结构型-组合模式(Composite)
- 重学设计模式 - Composite(组合)模式 - 结构型
- 设计模式--组合模式Composite(结构型)
- 设计模式-结构型- 组合模式(Composite)
- 结构型设计模式之组合模式(Composite Pattern)
- [设计模式-结构型]组合(Composite )
- 设计模式-结构型-composite 组合
- 结构型模式-----组合模式(Composite)
- Composite模式(组合模式 结构型)
- 设计模式—结构型-Composite(组合)
- composite组合设计模式(结构型)学习
- (C++设计模式) ------Composite 组合模式-- 结构型模式
- 在Android 6.0 设备上动态获取权限
- CSS3 单选框动画特效
- android获取手机时间
- Canvas save、restore方法
- PCB课程设计6.2(元器件封装库的创建:wizard创建)
- 设计模式-结构型- 组合模式(Composite)
- myIterator
- Java NIO系列教程(四)Scatter/Gather
- 【Bash百宝箱】GNU make命令
- html 里的css 和Js 的代码怎么插入?
- android与javascript相互调用
- 内存数据库
- Maven依赖搜索站点
- Android中如何批量设置矢量图