针对问题:组合模式使我们在处理树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
组合模式结构图:
组合模式实现代码:
/**
* 为树叶或树枝抽象一个接口
* @author bruce
*
*/
public abstract class Component {
public abstract void operation();
public void add(Component component){
throw new UnsupportedOperationException();
}
public void remove(Component component){
throw new UnsupportedOperationException();
}
public Component getChild(int index){
throw new UnsupportedOperationException();
}
}
/**
* 树叶
* @author bruce
*
*/
public class Leaf extends Component{
private String name;
public Leaf(String name){
this.name=name;
}
@Override
public void operation() {
// TODO Auto-generated method stub
System.out.println(name);
}
}
/**
* 树枝
* @author bruce
*
*/
public class Composite extends Component{
private List<Component> list=new ArrayList<Component>();
private String name;
public Composite(String name){
this.name=name;
}
@Override
public void operation() {
// TODO Auto-generated method stub
System.out.println(name);
/**
* for..each 递归调用operation()
*/
Iterator<Component> iterator=list.iterator();
while(iterator.hasNext()){
Component component=iterator.next();
component.operation();
}
}
@Override
public void add(Component component) {
// TODO Auto-generated method stub
list.add(component);
}
@Override
public void remove(Component component) {
// TODO Auto-generated method stub
list.remove(component);
}
@Override
public Component getChild(int index) {
// TODO Auto-generated method stub
return list.get(index);
}
}
/**
* 测试
* @author bruce
*
*/
public class Client {
public static void main(String[] args) {
Component c=new Composite("C:/");
Component cl=new Leaf("test.java");
Component cc=new Composite("C:/program file/");
Component cclA=new Leaf("QQ.exe");
Component cclB=new Leaf("360.exe");
cc.add(cclA);
cc.add(cclB);
c.add(cl);
c.add(cc);
c.operation();
/**
* output:
*
C:/
test.java
C:/program file/
QQ.exe
360.exe
*/
}
}
- 大小: 8.2 KB
分享到:
相关推荐
树形结构的处理——组合模式(二) 树形结构的处理——组合模式(三) 树形结构的处理——组合模式(四) 树形结构的处理——组合模式(五) 装饰模式-Decorator Pattern 扩展系统功能——装饰模式(一) 扩展系统...
而且无论客户端如何定义叶子构件对象都无法调用到这些方法,不需要做任何错误和异常处理,容器构件再根据需要增加访问和管理成员的方法,但这时候也存在一个问题:客户端不
10. **组合模式**:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 11. **享元模式**:运用共享技术有效地支持大量细粒度的对象,主要用于节省内存,提高...
- 组合模式:允许你将对象组合成树形结构,表现得像单个对象。 - 装饰模式:动态地给一个对象添加一些额外的职责,可以增加或修改其功能。 - 外观模式:为子系统提供一个统一的接口,使得子系统更容易使用。 - ...
组合模式允许用户将对象组织成树形结构以表示部分-整体层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 #### 3.4 装饰模式 装饰模式动态地给一个对象添加一些额外的职责。就增加功能而言,装饰...
为了帮助 .NET 开发者更好地理解和应用这些设计模式,《Head First 设计模式》为 .NET 2.0 特别推出了一个配套文档——《设计模式框架》(Design Pattern FrameworkTM),该文档涵盖了原书中介绍的所有设计模式,并...
2. 结构型模式:这类模式主要关注如何将类或对象组合成更大的结构,如适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、组合模式(Composite)和...
通过阅读GOF23种设计模式.docx文档和探索DesignPattern项目中的代码,你可以深入理解每种模式的用途、优点以及如何在C#和.NET Core环境中实现它们。对于想要提升编程技能和代码质量的开发者来说,这是一个宝贵的资源...
虽然对于初学者来说,面对英文资料可能会感到困难,但“Design Pattern In C# (英文).pdf”这本书为读者提供了23种经典设计模式的详细解释,包括了它们的概念、实现方式以及在C#中的应用实例。尽管阅读时可能会遇到...
- 组合模式:允许你将对象组合成树形结构来表示“部分-整体”的层次结构。 - 装饰模式:动态地给一个对象添加一些额外的职责,增强功能而不改变其原有结构。 - 外观模式:为子系统提供一个一致的接口,简化客户端...
- 组合模式(Composite):允许你将对象组合成树形结构来表现“整体/部分”层次结构。 - 外观模式(Facade):为子系统提供一个统一的接口,简化其使用。 - 代理模式(Proxy):为其他对象提供一种代理以控制对这...
**设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式进行深入探讨。 #### 二、设计模式的基本定义 ...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是软件工程领域中一个极为重要的概念,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式更是...
#### 第9章:良好的集合管理——迭代器模式和组合模式 迭代器模式提供了一种方法来顺序访问聚合对象中的一系列数据,而不暴露其内部表示。组合模式则将对象组织到树形结构中以表示部分整体层次结构,使得客户端可以...
其中包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。这些模式有助于减少类之间的耦合,提高代码的可重用性和可维护性。 3. 行为型模式:这类模式主要关注对象间如何交互和分配...