概述
是一种结构型模式,将对象以树形结构组织起来,以表示“部分 - 整体”的层次结构,使得客户端对单个对象和组合对象的使用具有唯一性。
UML类图
上面的类图包含的角色:
Component:为参加组合的对象声明一个公共的接口,不管是组合还是叶节点。
Leaf:在组合中表示叶子结点对象,叶子结点没有子结点。
Composite:表示参加组合的有子对象的对象,并给出树枝构建的行为;
代码示例
import java.util.ArrayList; import java.util.List; abstract class Component { protected String name; public Component(String name) { this.name = name; } public abstract void Add(Component c); public abstract void Remove(Component c); public abstract void GetChild(int depth); } class Leaf extends Component { public Leaf(String name) { super(name); } @Override public void Add(Component c) { System.out.println("Can not add to a leaf"); } @Override public void Remove(Component c) { System.out.println("Can not remove from a leaf"); } @Override public void GetChild(int depth) { String temp = " "; for (int i = 0; i < depth; i++) { temp += "-"; System.out.println(temp + name); } } } class Composite extends Component { private List<Component> children = new ArrayList<>(); public Composite(String name) { super(name); } @Override public void Add(Component c) { children.add(c); } @Override public void Remove(Component c) { children.remove(c); } @Override public void GetChild(int depth) { for (Component c : children) { c.GetChild(depth); } } } public class Main { public static void main(String args[]) { Composite root = new Composite("root"); root.Add(new Leaf("Leaf A")); root.Add(new Leaf("Leaf B")); Composite compX = new Composite("Composite X"); compX.Add(new Leaf("Leaf XA")); compX.Add(new Leaf("Leaf XB")); root.Add(compX); Composite compXY = new Composite("Composite XY"); compXY.Add(new Leaf("Leaf XYA")); compXY.Add(new Leaf("Leaf XYB")); compX.Add(compXY); root.GetChild(3); } }
应用场景
1.要求表示对象的部分-整体层次结构。
2.想要客户端忽略组合对象与单个对象的差异,客户端将统一地使用组合结构中的所有对象。
组合模式定义由Leaf对象和Composite对象组成的类结构;
使得客户端变得简单;
它使得添加或删除子部件变得很容易。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
介绍 组合模式(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 常见的场景有asp.net里的控件机制(即control里可以包含子control,可以递归操作、添加、删除子control),类似的还有DOM的机制,一个DOM节点可以包含子节点,不管是父节点还是子节点都有添加、删除、遍历子节点的通用功能。所以说组合模式
本文向大家介绍Java设计模式之组合模式(Composite模式)介绍,包括了Java设计模式之组合模式(Composite模式)介绍的使用技巧和注意事项,需要的朋友参考一下 Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。 Composite比较容易理解,想到Composite就应该想到树形结构图。组合体内这些对
本文向大家介绍23种设计模式(10)java组合模式,包括了23种设计模式(10)java组合模式的使用技巧和注意事项,需要的朋友参考一下 23种设计模式第四篇:java组合模式 介绍 组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕. 组合模式可以优化处理递归或分级数据结
组合(Composite) Intent 将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。 Class Diagram 组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。 组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶
本文向大家介绍java 设计模式之单例模式,包括了java 设计模式之单例模式的使用技巧和注意事项,需要的朋友参考一下 java 设计模式之单例模式 前言: 在软件开发过程中常会有一些对象我们只需要一个,如:线程池(threadpool)、缓存(cache)、对话框、偏好设置等。这些对象如果制造出多个实例的话可能会导致一些不必要的麻烦,如:程序行为异常、资源使用过量等。这时单例模式就可以确保
本文向大家介绍java设计模式之单例模式,包括了java设计模式之单例模式的使用技巧和注意事项,需要的朋友参考一下 单例模式也叫做单肩模式,也是一种创建型模式,是我们日常开发中最常使用的一种设计模式,经常被用来封装一些工具类,例如数据库连接等。 单例模式的定义: 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类