`
longrui
  • 浏览: 10126 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

结构型模式 - Composite(组合)模式

阅读更多

 

 

定义:

把多个对象组成树状结构来表示局部与整体,这样用户可以一样的对待单个对象和对象的组合。

 

组合模式的通过树形结构来描述单个对象和对象组合,通过迭代的方式获取节点下的子节点,同时通过一个高度抽象的接口使用户可以一致的操作单个对象和对象组合,简化客户端的工作。

同时由于使用树状结构,可以灵活添加、删除节点,而不用改动过客户端代码。

 

定义角色:

  • component:为所有对象定义统一的接口,并且提供管理子节点的方法(add/remove),对象个体和对象群组共享该接口。
  • composite:对象组合,树结构的枝节点,可以包含对象个体也可以包含另一个对象组合。(component的实现类)
  • leaf:对象个体,树结构的子节点(component的实现类)

文档打印:

希望将一些优秀的文档打印出来。由于文档比较多,所以又为他们进行分类。通过组合模式,打印机只要调用print方法就可以把需要的文档都打印出来。

 

component:

public interface IDoc {
	public int getCount();				//文档的数量
	public void print();				//打印
	public boolean add(IDoc doc);		//添加一个子节点(枝/叶)
	public boolean remove(IDoc doc);	//移除一个子节点
}

 

composite:

public class Folder implements IDoc {
	
	private List<IDoc> folder = new ArrayList<IDoc>();
	
	public int getCount() {
		int count = 0;
		for(IDoc doc : folder)
			count += doc.getCount();
		return count;
	}
	
	public void print() {
		for(IDoc doc : folder)
			doc.print();
	}

	public boolean add(IDoc doc) {
		return folder.add(doc);
	}
	
	public boolean remove(IDoc doc) {
		return folder.remove(doc);
	}
}

 

leaf:

 叶节点是无法添加节点的,所以出于安全目的,当调用叶节点中关于子节点操作的方法时会抛出异常。

public class Document implements IDoc {
	
	private String docName;

	public Document(String docName) {
		this.docName = docName;
	}
	
	public int getCount() {
		return 1;
	}

	public void print() {
		System.out.println(docName);
	}

	public boolean add(IDoc doc) {
		throw new RuntimeException("叶节点无法添加文档...");
	}

	public boolean remove(IDoc doc) {
		throw new RuntimeException("叶节点无法删除文档...");
	}
}

 

最后看下客户端的调用:

public class Client {

	public static void main(String[] args) {
		Folder composite = new Folder();
		composite.add(new Document("Java学习笔记"));
		Folder folder = new Folder();
		folder.add(new Document("组合模式学习笔记(上)"));
		folder.add(new Document("组合模式学习笔记(下)"));
		composite.add(folder);
		System.out.println("打印文档的数量为:" + composite.getCount());
		composite.print();
	}

}

输出结果:

打印文档总数:3
Java学习笔记
组合模式学习笔记(上)
组合模式学习笔记(下)

 

如果下次想添加几篇文档再打印时,打印机仍然只要调用print方法就可以了。

  • 大小: 11.1 KB
分享到:
评论

相关推荐

    c++设计模式-结构型模式-组合模式

    c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...

    设计模式之组合模式(Composite Pattern)

    组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,具体到第9篇讨论的是“Composite组合模式”。这一模式属于结构型模式的一种,旨在解决...

    设计模式--组合模式java例子

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够像处理单个对象一样处理整个集合。在Java中,这种模式的应用可以帮助我们简化对复杂对象层次结构的操作,同时保持接口的...

    设计模式面面观(11):组合模式(Composite Pattern)-结构型模式

    组合模式是软件工程中的一种结构型设计模式,它允许我们以树形结构来表示部分与整体的关系,使得客户端代码可以一致地处理单个对象和对象组合。在组合模式中,部分和整体通过统一的接口进行交互,这种“部分”和...

    C#面向对象设计模式纵横谈\9 结构型模式Composite组合模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第9节:结构型模式Composite组合模式

    java常用设计模式-组合模式

    组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中,有两种基本类型的对象:叶...

    组合模式-------树形模式

    组合模式,也称为树形模式,是一种结构型设计模式,它允许我们表示部分-整体层次结构,使得客户端代码可以统一地处理单个对象和对象集合。这种模式将对象组织成树形结构,允许用户对部分或整个树进行操作,简化了...

    c++-设计模式之组合模式(Composite Pattern)

    组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,这种模式常用于需要处理树形结构的数据...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) (Level 300)

    组合模式是一种结构型设计模式,它允许我们创建部分-整体层次结构,使得部分与整体具有相同的行为。在C#中,这种模式可以帮助我们构建复杂的树形结构,使得客户端代码可以一致地处理单个对象和对象集合。让我们深入...

    设计模式-组合实体

    在众多设计模式中,组合实体(Composite)模式是一种结构型模式,它允许我们以树形结构来表示部分与整体的关系,使得用户可以一致地处理单个对象和对象组合。在iOS开发中,组合实体模式尤其有用,因为它简化了复杂...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    组合模式(Composite Pattern)-结构型模式 (0%) &lt;br&gt;讲义书写模式 在实际的讲解中我会用一套模式来讲述我对设计模式的理解 1.给出当前章节模式的名称 2.讲述一个小故事,提出问题 3.回答这个...

    组合模式-五子棋代码.zip

    总的来说,"组合模式-五子棋代码.zip" 中的源代码展示了如何利用组合模式来构建一个功能完备的五子棋游戏。通过这种模式,代码结构清晰,维护性和可扩展性得到提升,使得游戏逻辑更容易理解和实现。

    06-Composite.rar

    在众多的设计模式中,“组合模式”(Composite Pattern)是一种结构型模式,其核心在于将简单对象和复杂对象组合起来,形成一个整体,使得用户可以对单个对象和组合对象以相同的方式进行操作。 组合模式的主要目标...

    设计模式专题之(九)组合模式---设计模式组合模式示例代码(python--c++)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们可以在统一的接口下处理单个对象和对象的组合。这个模式在处理类似目录树或者组织架构这样的数据时非常有用。在组合模式中,...

    设计模式C++学习之组合模式(Composite)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够以统一的方式处理单个对象和对象集合。在C++中,组合模式的应用可以帮助我们构建灵活且易于操作的对象层次结构,使得客户端...

    [结构型模式] 组合模式的理解

    在【组合模式-类图.pdf】和【组合模式-概念图.pdf】中,你可能会看到更详细的类图表示和概念解释,这些文档可以帮助你更好地理解组合模式的结构和工作原理。通过阅读这些资料,你可以深入学习如何在实际项目中应用...

    设计模式-组合模式(讲解及其实现代码)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们能够以统一的方式来处理单个对象和对象的组合。在组合模式中,单个对象和组合对象都被视为同一类型,这使得客户端代码可以对...

Global site tag (gtag.js) - Google Analytics