前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-组合实体模式

设计模式-组合实体模式

作者头像
逍遥壮士
发布2020-09-18 11:29:50
5910
发布2020-09-18 11:29:50
举报
文章被收录于专栏:技术趋势技术趋势

背景

通常我们收快递,有时候上班期间真的没有空去收啊,所有就会委托其他人,或者说让房管代收一下,然后房管会统一放到一个地方,下再我们再去取,而这个统一管理,我们就不用直接在工作期间去收快递,并且最终也可以拿到我人们的快递。

组合实体模式是什么?

组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。

角色:

组合实体(Composite Entity) - 它是主要的实体 bean。它可以是粗粒的,或者可以包含一个粗粒度对象,用于持续生命周期。

粗粒度对象(Coarse-Grained Object) - 该对象包含依赖对象。它有自己的生命周期,也能管理依赖对象的生命周期。

依赖对象(Dependent Object) - 依赖对象是一个持续生命周期依赖于粗粒度对象的对象。

策略(Strategies) - 策略表示如何实现组合实体。

优点:

易拓展:组合实体可以自由增加,遵循了开闭原则;

缺点:

破坏了单一职责,又获取组合体信息又打印组合体破坏了单一职责;

组合实体模式可以干嘛?

通过组合实体模式,通过一个组合实体的实客户端来控制原有的实体,进行创建和数据替换,起到一个统一管理。

个人理解:

就类似于收快递,楼下房管给你统一收了,统一放了。

组合实体模式类图

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

实现代码

代码语言:javascript
复制
/**
 * @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;
    }
}
代码语言:javascript
复制
/**
 * @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;
    }
}
代码语言:javascript
复制
/**
 *
 * 功能描述:粗粒度对象
 *
 * @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()};
   }
}
代码语言:javascript
复制
/**
 * @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();
    }
}
代码语言:javascript
复制
/**
 * @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);
    }
}
代码语言:javascript
复制
/**
 * @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();
    }
}

结果

代码语言:javascript
复制
Data:Test
Data:Data
Data:test2
Data:data2

源码下载:https://gitee.com/hong99/design-model/issues/I1IMES

最后

组实合实体跟门面模式,非常相似,同样是一个中心节点,用户的请求都是通过一个对外暴露的实体进行处理,同样存在这个中心节点一但出现问题那系统可能都瘫痪了...就类似于有些小平台,单节点一但哪天并发量上来就直接发挂了...所以在正常场景下,都是通过分布式来布署多节点,并且通过主从互换的,若哪些主节点挂了,子节点马上顶上去。就类似于redis集群哨兵模式一样。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
  • 源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档