组合实体模式

组合实体模式

模式定义

将部分整体的层次结构转换为树状结构,使得客户访问对象和组合对象具有一致性

例子

创建依赖对象

public class DependentObject1 {
   
   private String data;
 
   public void setData(String data){
      this.data = data; 
   } 
 
   public String getData(){
      return data;
   }
}

public class DependentObject2 {
   
   private String data;
 
   public void setData(String data){
      this.data = data; 
   } 
 
   public String getData(){
      return data;
   }
}

创建粗粒度对象

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()};
   }
}

创建组合实体

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();
   }
}

创建使用组合实体的客户端类

public class Client {
   private CompositeEntity compositeEntity = new CompositeEntity();
 
   public void printData(){
      for (int i = 0; i < compositeEntity.getData().length; i++) {
         System.out.println("Data: " + compositeEntity.getData()[i]);
      }
   }
 
   public void setData(String data1, String data2){
      compositeEntity.setData(data1, data2);
   }
}

使用 Client 来演示组合实体设计模式的用法

  Client client = new Client();
  client.setData("Test", "Data");
  client.printData();
  client.setData("Second Test", "Data1");
  client.printData();

输出结果:

Data: Test
Data: Data
Data: Second Test
Data: Data1

总结

优点:

  1. 组合模式可以以层次结构清楚的定义复杂对象。让高层次忽略层次差异
  2. 高层次可以使用统一的方法而不用担心它是枝干还是叶子。比如ViewGroup的dispatchView
  3. 组合模式可以形成复杂的树形结构,但对树形机构的控制却非常简单

缺点:

  1. 叶子类型不能控制。比如我想控制ViewGroup添加的View必须为TextView的时候,约束起来就很麻烦。特别是类型多的时候
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值