首页
设计模式
常用bat文件
Maven教程
前端公共工具类
mongodb
算法收集与实现
Sqlserver常用知识
Oracle常用知识梳理
更多……
申请加入课程
单例模式
外观模式
工厂模式
建造者模式
原型模式
适配器模式
桥接模式
过滤器模式
组合模式
装饰器模式
享元模式
代理模式
责任链模式
命令模式
解释器模式
迭代器模式
中介者模式
备忘录模式
观察者模式
状态模式
空对象模式
策略模式
模板模式
访问者模式
MVC 模式
业务代表模式
组合实体模式
数据访问对象模式
前端控制器模式
拦截过滤器模式
服务定位器模式
传输对象模式
组合实体模式
星辰
2018-09-17
0
0
204
人
0
人评论
0
人举报
# 组合实体模式 > 组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。 * 组合实体(Composite Entity)- 它是主要的实体 bean。它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期 * 粗粒度对象(Coarse-Grained Object) - 该对象包含依赖对象。它有自己的生命周期,也能管理依赖对象的生命周期。 * 依赖对象(Dependent Object) - 依赖对象是一个持续生命周期依赖于粗粒度对象的对象。 * 策略(Strategies) - 策略表示如何实现组合实体。 ## 实现案例代码 * 案例一 ``` package com.noteshare.designPatterns.composite.demo1; public interface Component { public void doSomething(); } package com.noteshare.designPatterns.composite.demo1; public class Leaf implements Component{ @Override public void doSomething() { System.out.println("执行方法"); } } package com.noteshare.designPatterns.composite.demo1; import java.util.ArrayList; import java.util.List; /** * 组合模式第一种实现:将管理子元素的方法定义在Composite类中。 * @author Administrator * */ public class Composite implements Component{ private List
list = new ArrayList
(); public void add(Component component){ list.add(component); } public void remove(Component component){ list.remove(component); } public List
getAll(){ return this.list; } @Override public void doSomething() { for(Component component : list){ //经典:非常好的利用了方法的多态,方法是动态绑定的。 component.doSomething(); } } } package com.noteshare.designPatterns.composite.demo1; public class Client { public static void main(String[] args) { Component leaf1 = new Leaf(); Component leaf2 = new Leaf(); Composite comp1 = new Composite(); comp1.add(leaf1); comp1.add(leaf2); Component leaf3 = new Leaf(); Component leaf4 = new Leaf(); Composite comp2 = new Composite(); comp2.add(comp1); comp2.add(leaf3); comp2.add(leaf4); comp2.doSomething(); } } ``` * 案例二: ``` package com.noteshare.designPatterns.composite.demo2; import java.util.List; public interface Component { public void doSomething(); public void add(Component component); public void remove(Component component); public List
getAll(); } package com.noteshare.designPatterns.composite.demo2; import java.util.List; public class Leaf implements Component{ @Override public void add(Component component) { } @Override public void doSomething() { System.out.println("执行方法"); } @Override public List
getAll() { return null; } @Override public void remove(Component component) { } } package com.noteshare.designPatterns.composite.demo2; import java.util.ArrayList; import java.util.List; /** * 组合模式的第二种实现:将管理子元素的方法定义在Component接口中,这样Leaf类 * 就需要对这些方法空实现。 * @author Administrator * */ public class Composite implements Component{ private List
list = new ArrayList
(); @Override public void doSomething() { for(Component component : list){ component.doSomething(); } } @Override public void add(Component component) { list.add(component); } @Override public void remove(Component component) { list.remove(component); } @Override public List
getAll() { return this.list; } } ``` * 案例三 ``` package com.noteshare.designPatterns.composite.demo3; /** * 抽象文件类:抽象构件 ---Component */ public abstract class AbstractFile { public abstract void killVirus(); } package com.noteshare.designPatterns.composite.demo3; /** * 文本文件类:叶子构件 --leaf */ public class TextFile extends AbstractFile { private String name; public TextFile(String name) { this.name = name; } public void killVirus() { // 模拟杀毒 System.out.println("----对文本文件'" + name + "'进行杀毒"); } public String getName() { return name; } public void setName(String name) { this.name = name; } } package com.noteshare.designPatterns.composite.demo3; /** * 图像文件类:叶子构件--leaf */ public class ImageFile extends AbstractFile { private String name; public ImageFile(String name) { this.name = name; } @Override public void killVirus() { // 模拟杀毒 System.out.println("----对图像文件'" + name + "'进行杀毒"); } public String getName() { return name; } public void setName(String name) { this.name = name; } } package com.noteshare.designPatterns.composite.demo3; /** * 视频文件类:叶子构件 --leaf */ public class VideoFile extends AbstractFile { private String name; public VideoFile(String name) { this.name = name; } public void killVirus() { // 模拟杀毒 System.out.println("----对视频文件'" + name + "'进行杀毒"); } public String getName() { return name; } public void setName(String name) { this.name = name; } } package com.noteshare.designPatterns.composite.demo3; import java.util.ArrayList; /** * 文件夹类:容器构件 --Composite */ public class Folder extends AbstractFile { // 定义集合fileList,用于存储AbstractFile类型的成员 private ArrayList
fileList = new ArrayList
(); private String name; public Folder(String name) { this.name = name; } public void add(AbstractFile file) { fileList.add(file); } public void remove(AbstractFile file) { fileList.remove(file); } public AbstractFile getChild(int i) { return (AbstractFile) fileList.get(i); } public void killVirus() { System.out.println("****对文件夹'" + name + "'进行杀毒"); // 模拟杀毒 // 递归调用成员构件的killVirus()方法 for (Object obj : fileList) { ((AbstractFile) obj).killVirus(); } } public ArrayList
getFileList() { return fileList; } public void setFileList(ArrayList
fileList) { this.fileList = fileList; } public String getName() { return name; } public void setName(String name) { this.name = name; } } package com.noteshare.designPatterns.composite.demo3; /** * 安全的组合模式 */ public class Client { public static void main(String args[]) { // 针对抽象构件编程 AbstractFile file1, file2, file3, file4, file5; Folder folder1, folder2, folder3, folder4; folder1 = new Folder("Sunny的资料"); folder2 = new Folder("图像文件"); folder3 = new Folder("文本文件"); folder4 = new Folder("视频文件"); file1 = new ImageFile("小龙女.jpg"); file2 = new ImageFile("张无忌.gif"); file3 = new TextFile("九阴真经.txt"); file4 = new TextFile("葵花宝典.doc"); file5 = new VideoFile("笑傲江湖.rmvb"); folder2.add(file1); folder2.add(file2); folder3.add(file3); folder3.add(file4); folder4.add(file5); folder1.add(folder2); folder1.add(folder3); folder1.add(folder4); // 从“Sunny的资料”节点开始进行杀毒操作 folder1.killVirus(); } } ```
所有评论列表
点我发表评论