组合设计模式(部分-整体设计模式)
主要角色涉及三个
抽象构件角色(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,控制树枝构件的类型不太容易。
发表评论
-
调停者,观察者,门面模式
2011-11-15 19:38 1218调停者(Mediator)模式 ... -
访问者模式
2011-08-26 10:06 592访问者模式 -
状态模式
2011-08-26 10:06 458状态模式 -
备忘录模式
2011-08-25 16:17 746备忘录模式又叫快照模式或者Token模式 是对象的行为模式 ... -
命令模式
2011-08-25 14:40 666命令模式核心是封装命令类(请求类),每一个命令类作单独的类,分 ... -
责任链模式
2011-08-24 21:40 648责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理 ... -
模板方法模式
2011-08-24 13:35 627这个模式相对来说也比较简单。 -
策略模式
2011-08-23 16:02 638策略模式是比较常用的一种模式.封装不算法。每一个算法封装在不同 ... -
不变模式
2011-08-23 15:42 652不变模式比较简单,一般设计成一个类或者一个继承等级结构。 不 ... -
桥梁设计模式(柄体设计模式)
2011-08-22 23:51 685桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实 ... -
适配器模式(变压器模式)
2011-08-22 21:42 862为什么要 用适配器模式。就是把两个完全不关联或者不相同的类纠合 ... -
享元模式
2011-08-18 08:53 655享元模式的角色划分: 1,抽象享元角色:享元角色需要实现的公 ... -
装饰器模式(包裹模式)
2011-08-16 09:58 667装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是 ...
相关推荐
1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...
软件设计模式概述 2GoF 的 23 种设计模式 3UML中的类图及类图之间的关系 4开闭原则 5里氏替换原则 6依赖倒置原则 7单一职责原则 8接口隔离原则 9迪米特法则 10合成复用原则 11创建型模式的特点和分类 12单例模式 13...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元...
详细描述全部(23种)设计模式与设计原则(6种)。 (一)设计原则包括: 1、开闭原则 2、里氏代换原则 3、依赖转换原则 4、接口隔离原则 5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式...
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工厂方法...
针对23种设计模式,分别写了demo并画了类图帮助理解。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...
合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就 合成模式 是一个处理对象的树结构的模式。 合成模式把部分与整体的关系用树结构表示出来。 合成模 式使得客户端把一个个单独的...
设计模式的个人总结教材,适合IT专业人士研究,目录如下: 序言 概念 6 1.1 设计模式的定义 6 1.2 设计模式的作用 6 1.3 设计模式的由来 6 1.4 设计模式的分类 7 1.5 OO设计七原则 7 1.5.1 开-闭原则(OPEN-CLOSED ...
Android中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是View和ViewGroup类的使用。在android UI设计,几乎所有的widget和布局类都依靠这两个类。 组合模式,Composite Pattern,是一个非常巧妙的模式。几乎...
C#设计模式-结构型相关课件 合成模式(Composite) • 设计方案一: 合成模式(Composite) • 设计方案二 合成模式(Composite) • 设计方案一和设计方案二的区别 – 设计方案二使得客户端更不需要关心所需处理的...
二、设计模式遵循的原则有6个: 1、开闭原则(Open Close Principle) 对扩展开放,对修改关闭。 2、里氏代换原则(Liskov Substitution Principle) 只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,...
com.javapatterns.composite 合成模式 com.javapatterns.decorator 装饰模式 com.javapatterns.dip 依赖倒转原则 com.javapatterns.doubledispatch 专题:单分派与多分派 com.javapatterns.facade 门面模式 ...
设计模式 代码实践 TODO LIST UML图解 软件设计七大原则 1.开闭原则 2.依赖倒置原则 3.单一职责原则 4.接口隔离原则 5.迪米特法则 6.里氏替换原则 7.合成复用原则 创建型 单例模式 工厂模式 原型模式 建造者模式 ...
组合模式使得用户对单个对象和组合对象的使用具有一致性。 2. 解决的问题 当希望忽略单个对象和组合对象的区别,统一使用组合结构中的所有对象(将这种“统一”性封装起来)。 3. 组合模式中的角色 3.1 组合部件...
二、合成模式中主要角色 抽象组件(Component)角色:抽象角色,给参加组合的对象规定一个接口。在适当的情况下,实现所有类共有接口的缺省行为。声明一个接口用于访问和管理Component的子组件 树叶组件(Leaf)角色:在...
浅析java常用的设计模式(doc 23页) 1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即 可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修 改。如:如何...
设计模式综合应用实例 设计模式综合应用实例 多人联机射击游戏 多人联机射击游戏中的设计模式应用(一) 多人联机射击游戏中的设计模式应用(二) 数据库同步系统 设计模式综合实例分析之数据库同步系统(一) 设计...
定义:也叫合成模式,或者部分-整体模式,主要是用来描述部分与整体的关系,定义,将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 类图: 角色说明: ...