组合设计模式(部分-整体设计模式)
主要角色涉及三个
抽象构件角色(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 1291调停者(Mediator)模式 ... -
访问者模式
2011-08-26 10:06 621访问者模式 -
状态模式
2011-08-26 10:06 524状态模式 -
备忘录模式
2011-08-25 16:17 793备忘录模式又叫快照模式或者Token模式 是对象的行为模式 ... -
命令模式
2011-08-25 14:40 714命令模式核心是封装命令类(请求类),每一个命令类作单独的类,分 ... -
责任链模式
2011-08-24 21:40 704责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理 ... -
模板方法模式
2011-08-24 13:35 651这个模式相对来说也比较简单。 -
策略模式
2011-08-23 16:02 687策略模式是比较常用的一种模式.封装不算法。每一个算法封装在不同 ... -
不变模式
2011-08-23 15:42 683不变模式比较简单,一般设计成一个类或者一个继承等级结构。 不 ... -
桥梁设计模式(柄体设计模式)
2011-08-22 23:51 725桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实 ... -
适配器模式(变压器模式)
2011-08-22 21:42 892为什么要 用适配器模式。就是把两个完全不关联或者不相同的类纠合 ... -
享元模式
2011-08-18 08:53 684享元模式的角色划分: 1,抽象享元角色:享元角色需要实现的公 ... -
装饰器模式(包裹模式)
2011-08-16 09:58 694装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是 ...
相关推荐
合成模式(Composite Pattern)是软件工程中的一种设计模式,它属于结构型模式,主要用于处理对象的组合。在合成模式中,我们能够将简单对象和组合对象以统一的方式进行操作,这样用户就可以忽略对象的复杂性,而...
* 结构型设计模式:将己有的代码集成到新的面向对象设计中,用于处理类或对象的组合。 * 行为型设计模式:用于描述对类或对象怎样交互和怎样分配职责。 设计模式的优点 1. 设计模式融合了众多专家的经验,并以一种...
题目中的第一个选项“同一问题的不同表现形式”(A) 描述了设计模式的主要应用场景之一。设计模式帮助开发者处理常见的软件设计难题,确保代码的可读性、可维护性和可扩展性。 ### 2. 面向对象的基本原则 面向对象...
1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...
### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...
Java设计模式面试题汇总 本文将对Java设计模式面试题进行总结,涵盖软件设计原则、设计模式的定义、分类、常见模式等内容。 软件设计原则: 软件设计原则是指在软件设计中需要遵守的一些规则和原则,这些原则可以...
### Java设计模式(刘伟) #### 一、引言 在《Java设计模式》这本书中,作者刘伟全面地介绍了24种经典的设计模式,并通过丰富的案例和代码示例进行了详细的解析。本书不仅适合初学者作为入门教材,也适合有一定...
### 设计模式之我见 #### 设计模式的定义与意义 设计模式(Design Pattern)是一种在软件开发过程中被广泛采用的方法论,它基于一系列反复验证的解决方案,旨在提高代码的可读性、可重用性和可靠性。设计模式是...
合成模式允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合让客户可以统一处理个别对象以及组合对象。 十九、装饰模式 装饰模式动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成...
根据提供的文档概览,我们可以对每个章节所涉及的设计模式进行详细的阐述和解释。下面将针对文档中提及的设计模式逐一展开,以便更好地理解这些模式的概念、结构、应用场景以及优缺点。 ### 1. 面向对象程序设计...
Java软件设计模式是软件开发中的重要概念,它们是经过时间考验的最佳实践,旨在解决常见的设计问题,提高代码的可读性、可维护性和可扩展性。以下是对标题和描述中涉及的一些关键知识点的详细说明: 1. **单一职责...
C++设计模式是一种在软件开发中经过验证的通用解决方案,它们是解决常见问题的经验总结,可以提高代码的可重用性、可维护性和可扩展性。在这个"C++ Design Pattern 23种设计模式(全_解释+源代码).zip"压缩包中,包含...
1. **设计原则**:设计模式的基础是面向对象设计的七大原则,包括单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)、迪米特法则(LoD)和合成复用原则。...
Java设计模式是软件开发中的一种最佳实践,它们是为了解决特定场景下的设计问题而发展起来的。23种设计模式被广泛应用于提高代码的可重用性、可读性、可维护性和灵活性。韩顺平老师的Java设计模式课程通过生活中的...
【设计模式概述】 设计模式是软件工程中的一种最佳实践,它是为了解决在...以上内容是对23种设计模式的简要介绍,实际应用中,开发者需要根据项目需求选择合适的设计模式,灵活组合,以实现高效、可维护的代码结构。
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...
- 合成复用原则(Composite Reuse Principle):尽量使用对象组合,而不是继承。 - 迪米特原则(Law of Demeter):一个对象应该对其他对象有最少的了解。 3. 创建型模式和Java对象创建方式: - 简单工厂模式:...
本文档总结了设计模式的知识点,包括单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则等面向对象设计原则,以及创建型模式、结构型模式和行为型模式的分类和应用。
合成模式允许将对象组合成树形结构,以表示“整体-部分”的层次结构。例如,在购买礼物时,可以将多个小礼物组合成一个大礼盒,既满足了整体的送礼需求,又体现了礼物的多样性,提升了礼物的整体价值。 ##### 4. ...