组合模式又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解藕.
组合模式可以优化处理递归或分级数据结构.有许多关于分级数据结构的例子,使得组合模式非常有用武之地.
类图:
组成部分:
Component: 为参加组合的对象声明一个公共接口, 不管是组合还是叶结点.
Leaf: 在组合中表示叶子结点对象,叶子结点没有子结点.
Composite: 表示参加组合的有子对象的对象, 并给出树枝购件的行为.
实例:
public abstract class FolderComponent
{
private String name;
public String getName()
{
return name;
}
public void setName(final String name)
{
this.name = name;
}
public FolderComponent()
{
}
public FolderComponent(final String name)
{
this.name = name;
}
public abstract void add(FolderComponent component);
public abstract void remove(FolderComponent component);
public abstract void display();
}
public class FileLeaf extends FolderComponent
{
public FileLeaf(final String name)
{
super(name);
}
@Override
public void add(final FolderComponent component)
{
//...
}
@Override
public void remove(final FolderComponent component)
{
//...
}
@Override
public void display()
{
System.out.println("FileLeaf:" + this.getName());
}
}
public class FolderComposite extends FolderComponent
{
private final List<FolderComponent> components;
public FolderComposite(final String name)
{
super(name);
this.components = new ArrayList<FolderComponent>();
}
public FolderComposite()
{
this.components = new ArrayList<FolderComponent>();
}
@Override
public void add(final FolderComponent component)
{
this.components.add(component);
}
@Override
public void remove(final FolderComponent component)
{
this.components.remove(component);
}
@Override
public void display()
{
System.out.println("FolderComposite---name:" + this.getName());
for (final FolderComponent component : components)
{
System.out.println("FolderComposite---component-name:" + component.getName());
}
}
}
public class Client
{
public static void main(final String[] args)
{
final FolderComponent leaf = new FileLeaf("runnable file");
leaf.display();
final FolderComponent folder = new FolderComposite("new folder");
folder.add(new FileLeaf("content1 in new folder"));
folder.add(new FileLeaf("content2 in new folder"));
folder.display();
}
}
结果:
FileLeaf:runnable file
FolderComposite---name:new folder
FolderComposite---component-name:content1 in new folder
FolderComposite---component-name:content2 in new folder
相关推荐
设计模式--组合模式java例子
JAVA-设计模式-结构型模式-组合模式
java常用设计模式-组合模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
本章可以称为“给爱用继承的人一个全新的设计眼界”。我们即将再度探讨典型滥用问题。你将在本章学到如何使用对象组合的方式,做到在运行时装饰类。为什么呢?一旦你熟悉了装饰者的技巧...——《Head First 设计模式》
本课程适合所有需要弥补JAVA设计模式的同学,课件内容制作精细,由浅入深,适合入门或进行知识回顾。 【完整课程列表】 基于java程序语言的设计java模式课程 01-设计模式概述(共36页).pptx 基于java程序语言的...
自己最近才写的一个设计模式----组合模式小例子,请大家评价
1.2.3 组合模式 23 1.2.4 装饰模式 26 1.2.5 外观模式 29 1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者...
本资源包含一个由Java设计模式中的“组合模式”实现的“空军指挥系统”的全部源代码。注意:本资源含有的代码量比较大,对于急需“项目实战”的朋友很有帮助!需要的朋友可以下载哦!!!!!!!!!!
例如:随着计算机的不断发展,程序学习这门技术也越来越重要,很多人都开启了...面向对象设计原则一共有七个:开闭原则、里氏替换原则、依赖倒转原则、单一职责原则、接口隔离原则、组合/聚合复用原则、迪米特法则。
logo 3组合模式:整体-部分,比如节点和树组合模式:整体-部分,比如节点和树 设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板全文共22页,当前为第4页。 4装饰器模式:用到原来类的方法并且添加新的属性...
计算机后端-Java-图解java设计模式079 组合模式(3)-Hash.avi
JAVA设计模式例程-装饰模式-的例程,看完以后基本上能对JAVA上实现装饰模式能有所了解,个人认为常各种模式并不是为了死套各种模式,而应该是灵活的在项目中结合实际情况而用各种模式的组合应用,呵呵!但前提是得对...
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
计算机后端-Java-图解java设计模式077 组合模式(1).avi
计算机后端-Java-图解java设计模式078 组合模式(2).avi
计算机后端-Java-图解java设计模式080 组合模式(4).avi
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
本资源包含由Java设计模式中的“组合模式”实现的“五子棋”所有源代码,需要的朋友可以下载哦!