设计模式-复合实体模式

文章介绍了复合实体模式在建模和管理一组相关持久化对象中的应用。通过创建抽象从属对象类和粗粒度抽象类,然后定义具体从属类和复合实体类,实现了对如控制台对象中多个接口功能的统一管理。在Java代码示例中展示了如何组合消息对象和信号对象,并提供了初始化和数据操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:
复合实体模式用于对一组相关联的持久化对象进行建模、描述和管理,用于取代对这组对象描述为单独粒度的实体。
程序示例:
对于一个控制台对象,需要管理许多接口功能。通过使用复合实体模式,将消息对象、信号对象等依赖性对象组合在一起,直接使用单个对象对其进行控制。
1.创建抽象从属对象类和粗粒度抽象类

public abstract  class DependentObject<T>{
    T data;

    public void setData(T data) {
        this.data = data;
    }


    public T getData() {
        return data;
    }
}

public abstract class CoarseGrainedObject<T>{
    DependentObject<T>[] dependentObject;

    public void setData(T... data) {
        IntStream.range(0,data.length).forEach(i->dependentObject[i].setData(data[i]));
    }

    public T[] getData() {
        return (T[]) Arrays.stream(dependentObject).map(DependentObject::getData).toArray();
    }
}

2.创建从属类和复合实体类

public class SignalDependentObject extends DependentObject<String>{
}

public class MessageDependentObject extends DependentObject<String>{
}
//操作从属类
public class ConsoleCoarseGrainedObject extends CoarseGrainedObject<String>{

    @Override
    public String[] getData() {
        super.getData();
        return new String[]{
                dependentObject[0].getData(),dependentObject[1].getData()
        };
    }


    public void init(){
        dependentObject=new DependentObject[]{
                new MessageDependentObject(),new SignalDependentObject()

        };
    }
}
//复合实体类
public class CompositeEntity {

  private final ConsoleCoarseGrainedObject console = new ConsoleCoarseGrainedObject();

  public void setData(String message, String signal) {
    console.setData(message, signal);
  }

  public String[] getData() {
    return console.getData();
  }

  public void init() {
    console.init();
  }
}

测试

        CompositeEntity entity = new CompositeEntity();
        entity.init();
        entity.setDate("NO Danger","Green Light");

        Arrays.stream(entity.getDate()).forEach(System.out::println);
        entity.setDate("Danger","Red Light");
        Arrays.stream(entity.getDate()).forEach(System.out::println);
        
        /*
        NO Danger
        Green Light
        Danger
        Red Light
         */

类图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值