`
chendw_hz
  • 浏览: 10677 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

组合设计模式(合成模式)

阅读更多

组合设计模式(部分-整体设计模式)

主要角色涉及三个

抽象构件角色(component):规定参加参加组合的对象共有的行为,这个接口可以用来管理所有的子对象。

树叶构件角色:参加对象组合的树叶对象。给出add(),remove()之类的方法的平庸实现。一般针对树叶构件的角色不提供add(),remove()等管理子对象的方法。

树枝构件角色:参加组合的对象含有子对象的对象。

组合模式以树结构图的形式去理解。树枝节点可以添加和管理子类元素。树叶节点不具备添加和管理子组件的能力。

所以又分透明式和安全式。

透明式

 下面以我的电脑中的文件夹为例,文件可以增加文件。文件不能再添加子文件。已经是树叶节点。

 树叶和树枝都实现文件夹接口,文件夹可以添加子类文件。同时也继续添加子类文件夹。

而文件是树叶不具备添加子类文件的能力。故提供一个平庸实现。

//抽象构件类

public interface Folder{

     //访问文件夹

     public void visit(Folder folder);

     //添加

     public void add(Folder foler);

     //删除

     public void revmove(Folder folder);

    //多少个文件

    public int size();

}

 

//文件

public class FileLeaf implements Folder{

//访问文件 

 public void visit(Folder folder){

   System.out.println("访问当前的文件")

  }

 

//平庸实现

public void add(Folder folder){

 

}

//平庸实现

public void remove(Folder folder){

 

}

 

public int size(){

 

}

}

 

import java.util.List;

import java.util.ArrayList;

public class CompositeFolder implements Folder{

//管理集合的属性 

private List<Folder> componentList = new ArrayList<Folder>();

  //访问当前的文件夹 

  public void visit(Folder folder){

      if(!CollectionUtils.isEmpty()){

         for(Folder der:componentList){

             if(der==folder){

              System.out.println("访问当前的树枝节点")

          }

       }

     }

    }

//添加

public void add(Folder folder){

componentList .add(folder);

}

 

public void remove(Folder folder){

 componentList .remove(folder);

 

public int size(){

 componentList.size();

}

}

透明式的缺点是运行时。由于树叶节点不具备添加或者删除子文件的能力。运行时会报错。

安全式组合模式

//抽象构件类

public interface Folder{

     //访问文件夹

     public void visit(Folder folder);

}

 

//文件是树叶节点,不具备添加子类文件的能力。不提供这类操作

public class FileLeaf implements Folder{

//访问文件 

 public void visit(Folder folder){

   System.out.println("访问当前的文件")

  }

}

 

//树枝节点提供一个统一的访问接口。有管理子类的能力

public interface CompositeFolder extends Component{

     //添加

     public void add(Folder foler);

     //删除

     public void revmove(Folder folder);

    //多少个文件

    public int size();

}

 

//树枝节点实现类 实现抽树枝接口类

public class CompositeFolderImpl implements CompositeFolder{

 private List<Folder> compositeList = new ArrayList<Folder>();

 //添加

     public void add(Folder folder){

           compositeList.add(folder);

  }

     //删除

     public void remove(Folder folder){

       compositeList.remove(folder);

   }

    //多少个文件

    public int size(){

     compositeList.size();

   }

  

  //访问当前的文件夹 

  public void visit(Folder folder){

      if(!CollectionUtils.isEmpty()){

         for(Folder der:componentList){

             if(der==folder){

              System.out.println("访问当前的树枝节点")

          }

       }

     }

    }

}

 

应用场景:

1, 你表示部分/整体层次结构

2,不用区分单个构件和组合构件的区别时。

优点:

1,客户端很容易添加新的构件,树枝节点和树叶节点。

2,使客户端设计更容易。因为对树枝和树叶节点都是同等对待。

缺点:

 1,通过继承的方式添加新的行为很苦难。

 2,控制树枝构件的类型不太容易。

 

分享到:
评论

相关推荐

    尚硅谷设计模式源码笔记课件.zip

    1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...

    设计模式所有实验及实验报告及代码.zip

    软件设计模式概述 2GoF 的 23 种设计模式 3UML中的类图及类图之间的关系 4开闭原则 5里氏替换原则 6依赖倒置原则 7单一职责原则 8接口隔离原则 9迪米特法则 10合成复用原则 11创建型模式的特点和分类 12单例模式 13...

    24种设计模式介绍与6大设计原则

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    Java 设计模式

    java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元...

    设计模式(23种)与设计原则(6种)

    详细描述全部(23种)设计模式与设计原则(6种)。 (一)设计原则包括: 1、开闭原则 2、里氏代换原则 3、依赖转换原则 4、接口隔离原则 5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式...

    《设计模式实训教程》【PPT+类图与代码+样章】

    3.1.1设计模式 3.1.2创建型模式概述 3.1.3简单工厂模式 3.1.4工厂方法模式 3.1.5抽象工厂模式 3.1.6建造者模式 3.1.7原型模式 3.1.8单例模式 3.2实训实例 3.2.1简单工厂模式实例之图形工厂 3.2.2工厂方法...

    设计模式Demo

    针对23种设计模式,分别写了demo并画了类图帮助理解。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...

    C#23种设计模式_示例源代码及PDF

    合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就 合成模式 是一个处理对象的树结构的模式。 合成模式把部分与整体的关系用树结构表示出来。 合成模 式使得客户端把一个个单独的...

    设计模式,软件开发者必读

    设计模式的个人总结教材,适合IT专业人士研究,目录如下: 序言 概念 6 1.1 设计模式的定义 6 1.2 设计模式的作用 6 1.3 设计模式的由来 6 1.4 设计模式的分类 7 1.5 OO设计七原则 7 1.5.1 开-闭原则(OPEN-CLOSED ...

    Android设计模式系列之组合模式

    Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在android UI设计,几乎所有的widget和布局类都依靠这两个类。 组合模式,Composite Pattern,是一个非常巧妙的模式。几乎...

    C#设计模式结构型

    C#设计模式-结构型相关课件 合成模式(Composite) • 设计方案一: 合成模式(Composite) • 设计方案二 合成模式(Composite) • 设计方案一和设计方案二的区别 – 设计方案二使得客户端更不需要关心所需处理的...

    《Java设计模式(第2版)》

    二、设计模式遵循的原则有6个: 1、开闭原则(Open Close Principle) 对扩展开放,对修改关闭。 2、里氏代换原则(Liskov Substitution Principle) 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,...

    源码:阎宏设计模式光盘

    com.javapatterns.composite 合成模式 com.javapatterns.decorator 装饰模式 com.javapatterns.dip 依赖倒转原则 com.javapatterns.doubledispatch 专题:单分派与多分派 com.javapatterns.facade 门面模式 ...

    java餐饮管理系统源码-pattern:设计模式扫盲,以身边故事来讲解设计模式

    设计模式 代码实践 TODO LIST UML图解 软件设计七大原则 1.开闭原则 2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特法则 6.里氏替换原则 7.合成复用原则 创建型 单例模式 工厂模式 原型模式 建造者模式 ...

    C# 设计模式系列教程-组合模式

    组合模式使得用户对单个对象和组合对象的使用具有一致性。 2. 解决的问题  当希望忽略单个对象和组合对象的区别,统一使用组合结构中的所有对象(将这种“统一”性封装起来)。 3. 组合模式中的角色  3.1 组合部件...

    学习php设计模式 php实现合成模式(composite)

    二、合成模式中主要角色 抽象组件(Component)角色:抽象角色,给参加组合的对象规定一个接口。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理Component的子组件 树叶组件(Leaf)角色:在...

    浅析java常用的设计模式(doc-23页).doc

    浅析java常用的设计模式(doc 23页) 1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即 可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修 改。如:如何...

    design-pattern-java.pdf

    设计模式综合应用实例 设计模式综合应用实例 多人联机射击游戏 多人联机射击游戏中的设计模式应用(一) 多人联机射击游戏中的设计模式应用(二) 数据库同步系统 设计模式综合实例分析之数据库同步系统(一) 设计...

    详解组合模式的结构及其在Ruby设计模式编程中的运用

    定义:也叫合成模式,或者部分-整体模式,主要是用来描述部分与整体的关系,定义,将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 类图: 角色说明: ...

Global site tag (gtag.js) - Google Analytics