JAVA设计模式之组合模式
2016-12-11 00:18
246 查看
JAVA设计模式之组合模式
概念:
组合模式(composite)把部分和整体用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。
角色
-抽象构件(component)角色:定义了叶子和容器构件的共同点-叶子(Leaf)构件角色:无子节点
-容器(composite)构件角色:有容器特征,可以包含子节点
类图
应用
操作系统的资源管理器GUI中的容器层次图
XML文件解析
OA系统中,组织结构的处理
Junit单元测试框架--底层设计就是典型的组合模式,TestCase(叶子)、TestSuite(容器)、Test接口(抽象)
会员卡消费:
1. 我们的部件有,总店,分店,加盟店!
2. 我们的部件共有的行为是:刷会员卡
3. 部件之间的层次关系,也就是店面的层次关系是,总店下有分店、分店下可以拥有加盟店。
代码
删除文件的关系,会删除子文件等,如果使文件夹,还要递归删除public interface AbstractFile { void killVirus(); } class ImageFile implements AbstractFile { private String name; public ImageFile(String name) { super(); this.name = name; } @Override public void killVirus() { System.out.println("image " + name + " kill"); } } class TextFile implements AbstractFile { private String name; public TextFile(String name) { super(); this.name = name; } @Override public void killVirus() { System.out.println("text " + name + " kill"); } } class VideoFile implements AbstractFile { private String name; public VideoFile(String name) { super(); this.name = name; } @Override public void killVirus() { System.out.println("video " + name + " kill"); } } class Folder implements AbstractFile { private String name; // 定义容器存放leaf private List list = new ArrayList<> (); public Folder(String name) { super(); this.name = name; } public void add(AbstractFile file) { list.add(file); } public void remove(AbstractFile file) { list.remove(file); } public AbstractFile getChild(int index) { return list.get(index); } @Override public void killVirus() { System.out.println("folder " + name + " kill"); for (AbstractFile file : list) { file.killVirus(); } } }
public class Main { public static void main(String[] args) { AbstractFile f2, f3, f4, f5, f6; Folder f1 = new Folder("/"); f2 = new ImageFile("5.jpg"); f3 = new TextFile("1.txt"); f1.add(f2); f1.add(f3); f1.killVirus(); } }
会员卡消费:
1. 我们的部件有,总店,分店,加盟店!
2. 我们的部件共有的行为是:刷会员卡
3. 部件之间的层次关系,也就是店面的层次关系是,总店下有分店、分店下可以拥有加盟店。
4. 要求就是目前店面搞活动当我在总店刷卡后,就可以累积相当于在所有下级店面刷卡的积分总额
import java.util.ArrayList; import java.util.List; public class PayDemo { public abstract class Market { String name; public abstract void add(Market m); public abstract void remove(Market m); public abstract void PayByCard(); } // 分店 下面可以有加盟店 public class MarketBranch extends Market { // 加盟店列表 List list = new ArrayList<PayDemo.Market> (); public MarketBranch(String s) { this.name = s; } @Override public void add(Market m) { // TODO Auto-generated method stub list.add(m); } @Override public void remove(Market m) { // TODO Auto-generated method stub list.remove(m); } // 消费之后,该分店下的加盟店自动累加积分 @Override public void PayByCard() { // TODO Auto-generated method stub System.out.println(name + "消费,积分已累加入该会员卡"); for (Market m : list) { m.PayByCard(); } } } // 加盟店 下面不在有分店和加盟店,最底层 public class MarketJoin extends Market { public MarketJoin(String s) { this.name = s; } @Override public void add(Market m) { // TODO Auto-generated method stub } @Override public void remove(Market m) { // TODO Auto-generated method stub } @Override public void PayByCard() { // TODO Auto-generated method stub System.out.println(name + "消费,积分已累加入该会员卡"); } } public static void main(String[] args) { PayDemo demo = new PayDemo(); MarketBranch rootBranch = demo.new MarketBranch("总店"); MarketBranch qhdBranch = demo.new MarketBranch("秦皇岛分店"); MarketJoin hgqJoin = demo.new MarketJoin("秦皇岛分店一海港区加盟店"); MarketJoin btlJoin = demo.new MarketJoin("秦皇岛分店二白塔岭加盟店"); qhdBranch.add(hgqJoin); qhdBranch.add(btlJoin); rootBranch.add(qhdBranch); rootBranch.PayByCard(); } }
参考:http://blog.csdn.net/jason0539
相关文章推荐
- java 设计模式之: 组合模式(Composite)---1 【转】
- Java与设计模式-组合模式
- java设计模式——组合模式
- java设计模式之组合模式
- 设计模式之组合模式java实现
- Java与设计模式-组合模式
- JAVA设计模式之组合模式
- 设计模式--结构模式--组合模式--Java
- Java设计模式十六:组合模式(Composite Pattern)
- Java设计模式之十四(组合模式)
- Java设计模式(五)Facade(外观),Composite(组合),Decorator(油漆工)
- java 设计模式学习笔记八 composite组合模式
- JAVA设计模式:组合(Composite)
- java设计模式之组合模式
- java设计模式之组合模式
- java设计模式之 Composite(组合)
- Java设计模式——组合模式
- java 设计模式学习笔记八 composite组合模式
- 设计模式之组合模式java实现
- Java设计模式之迭代器模式和组合模式