上文(设计模式-业务代表模式):https://blog.csdn.net/qq_16498553/article/details/106955336
目录
背景
组合实体模式是什么?
组合实体模式可以干嘛?
个人理解:
组合实体模式类图
源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
实现代码
结果
源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
最后
通常我们收快递,有时候上班期间真的没有空去收啊,所有就会委托其他人,或者说让房管代收一下,然后房管会统一放到一个地方,下再我们再去取,而这个统一管理,我们就不用直接在工作期间去收快递,并且最终也可以拿到我人们的快递。
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
角色:
组合实体(Composite Entity) - 它是主要的实体 bean。它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期。
粗粒度对象(Coarse-Grained Object) - 该对象包含依赖对象。它有自己的生命周期,也能管理依赖对象的生命周期。
依赖对象(Dependent Object) - 依赖对象是一个持续生命周期依赖于粗粒度对象的对象。
策略(Strategies) - 策略表示如何实现组合实体。
优点:
易拓展:组合实体可以自由增加,遵循了开闭原则;
缺点:
破坏了单一职责,又获取组合体信息又打印组合体破坏了单一职责;
通过组合实体模式,通过一个组合实体的实客户端来控制原有的实体,进行创建和数据替换,起到一个统一管理。
就类似于收快递,楼下房管给你统一收了,统一管理。
/**
* @Auther: Administrator
* @Date: 2020-06-26 11:31
* @Description:依赖对象
*/
public class DependentObject2 {
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
/**
* @Auther: Administrator
* @Date: 2020-06-26 11:31
* @Description:依赖对象
*/
public class DependentObject1 {
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
/**
*
* 功能描述:粗粒度对象
*
* @param:
* @return:
* @auther: csh
* @date: 2020-06-26 11:45
*/
public class CoarseGrainedObject {
DependentObject1 do1 = new DependentObject1();
DependentObject2 do2 = new DependentObject2();
public void setData(String data1, String data2){
do1.setData(data1);
do2.setData(data2);
}
public String[] getData(){
return new String[] {do1.getData(),do2.getData()};
}
}
/**
* @Auther: csh
* @Date: 2020-06-26 11:46
* @Description:组合体
*/
public class CompositeEntity {
private CoarseGrainedObject cgo = new CoarseGrainedObject();
public void setData(String data1,String data2){
cgo.setData(data1,data2);
}
public String[] getData(){
return cgo.getData();
}
}
/**
* @Auther: csh
* @Date: 2020-06-26 11:49
* @Description:测试组合实体对象
*/
public class Client {
private CompositeEntity compositeEntity = new CompositeEntity();
public void pintData(){
for (String s : compositeEntity.getData()) {
System.out.println("Data:"+s);
}
}
public void setData(String data1,String data2){
compositeEntity.setData(data1,data2);
}
}
/**
* @Auther: csh
* @Date: 2020-06-26 12:04
* @Description:组合实体模式
*/
public class Test {
public static void main(String[] args) {
Client client = new Client();
client.setData("Test","Data");
client.pintData();
client.setData("test2","data2");
client.pintData();
}
}
Data:Test
Data:Data
Data:test2
Data:data2
组实合实体跟门面模式,非常相似,同样是一个中心节点,用户的请求都是通过一个对外暴露的实体进行处理,同样存在这个中心节点一但出现问题那系统可能都瘫痪了...就类似于有些小平台,单节点一但哪天并发量上来就直接发挂了...所以在正常场景下,都是通过分布式来布署多节点,并且通过主从互换的,若哪些主节点挂了,子节点马上顶上去。就类似于redis集群哨兵模式一样。