设计模式-复合实体模式

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值