java设计模式的2种设计模式-组合模式和组合实体模式

  1. 组合模式
    适用于树形式的场景,有整体和部分的概念,比如企业、树、目录等,有树枝、叶子,树枝能往下继续发展,但是叶子没有
    在这里插入图片描述
    在这里插入图片描述
    leaf和composit都继承component,但是leaf只实现show方法,因为叶子没有下一级
    在客户端中,虽然有component这类,没有直接实例它,都是通过compsite和leaf去实现它
Composite folderRoot = new Composite("网关组需求US文件夹");
        folderRoot.add(new Leaf("特性说明文档模板.docx"));
        folderRoot.add(new Leaf("开发简单设计文档模板.docx"));

        Composite folderLevel1 = new Composite("32.2版本开发需求");
        folderRoot.add(folderLevel1);

        Composite folderLevel2 = new Composite("23.2 迭代一需求");
        folderLevel1.add(folderLevel2);

        folderLevel2.add(new Leaf("网关动态路由转发需求开发设计文档.docx"));
        folderLevel2.add(new Leaf("网关鉴权功能开发设计文档.docx"));

        Leaf leaf = new Leaf("测试.txt");
        folderRoot.add(leaf);
        folderRoot.remove(leaf);

        folderRoot.show(0);
  1. 组合实体模式
    在实施上就是有多个类,一层一层实例化引用,特点是更新组合实体,内部的依赖对象也会自动更新,是比较简单的思想了
    在这里插入图片描述
    组合实体模式涉及的角色有:

依赖对象Dependent Object:Java Bean,生命周期由粗粒度对象维护(内部方法和数据由粗粒度对象调用和维护)

粗粒度对象Coarse-Grained Object:内部包含依赖对象,管理依赖对象的生命周期。

组合实体Composite Entity:包含粗粒度对象,维护粗粒度对象的生命周期。

策略Strategies:如何实现组合实体。

实践
依赖对象1:DependentObject1.java

package compositeentitypattern;

/**
 * 依赖对象1
 */
public class DependentObject1 {
    private String data;

    public String getData() {
        return data;
    }

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

依赖对象2:DependentObject2.java

package compositeentitypattern;

/**
 * 依赖对象2
 */
public class DependentObject2 {
    private String data;

    public String getData() {
        return data;
    }

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

粗粒度对象:CoarseGrainedObject.java

package compositeentitypattern;

/**
 * 粗粒度对象,管理依赖对象的生命周期
 */
public class CoarseGrainedObject {
    DependentObject1 dependentObject1 = new DependentObject1();

    DependentObject2 dependentObject2 = new DependentObject2();

    public void setData(String data1, String data2) {
        dependentObject1.setData(data1);
        dependentObject2.setData(data2);
    }

    public String[] getData() {
        return new String[] {dependentObject1.getData(), dependentObject2.getData()};
    }
}

组合实体:CompositeEntity.java

package compositeentitypattern;

/**
 * 组合实体,管理粗粒度对象的生命周期
 */
public class CompositeEntity {
    private CoarseGrainedObject coarseGrainedObject = new CoarseGrainedObject();

    public void setData(String data1, String data2) {
        coarseGrainedObject.setData(data1, data2);
    }

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

客户端:Client.java

package compositeentitypattern;

/**
 * 客户端
 */
public class Client {
    private CompositeEntity compositeEntity = new CompositeEntity();

    public void printData() {
        for (String data : compositeEntity.getData()) {
            System.out.println("Data:" + data);
        }
    }

    public void setData(String data1, String data2) {
        compositeEntity.setData(data1, data2);
    }
}

组合实体模式验证demo:CompositeEntityDemo.java

package compositeentitypattern;

public class CompositeEntityDemo {
    public static void main(String[] args) {
        Client client = new Client();
        client.setData("Test", "Data");
        client.printData();

        client.setData("Test2", "Data2");
        client.printData();
    }
}

结果:

Data:Test
Data:Data
Data:Test2
Data:Data2
总结:粗粒度对象管理依赖对象的生命周期,组合实体管理粗粒度对象的生命周期,策略用于实现组合实体。合到一块用于实现EJB持久化机制,平时开发中了解即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值