Composite 组合模式

本文深入探讨了组合模式在软件设计中的应用,特别是在处理树形结构数据时的优势。通过具体实例,如文件系统的复制操作,展示了如何统一处理简单和复杂元素,实现了代码的解耦和复用。

  

 

  注:组合模式是结构型设计模式 将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。

 

  组合模式又叫部分-整体模式,它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样处理复杂元素,从而使得客户程序和复杂元素的内部结构的解耦。

 

  组合模式在文件系统中有一个经典使用,文件夹、不同的文件组成一个非常复杂的树形结构,而我们的copy 操作,可以不必关心被copy的对象的树形结构。

 

Java可简单实现

 

1,定义一个树形节点接口

 

package com.pattern.structure.composite;

 

public interface Node {

 

public void copy() ;

}

 

2,定义两个文件

Mp3文件

 

package com.pattern.structure.composite;

 

public class Mp3 implements Node {

 

@Override

public void copy() {

 

System.out.println("copy mp3...");

}

 

}

 

Word文件

 

package com.pattern.structure.composite;

 

public class Word implements Node {

 

@Override

public void copy() {

 

System.out.println("copy word...");

}

 

}

 

3,定义一个文件夹

 

package com.pattern.structure.composite;

 

import java.util.ArrayList;

import java.util.List;

 

 

public class Folder implements Node {

 

private List<Node> nodes = new ArrayList<Node>() ;

 

public void add(Node node) {

nodes.add(node) ;

}

 

@Override

public void copy() {

for(Node node : nodes) {

node.copy(); 

}

}

 

}

 

4,定义一个客户端程序

 

package com.pattern.structure.composite;

 

public class Client {

 

public static void main(String[] args) {

// 简单元素

Node mp3 = new Mp3() ;

Mp3.copy(); 

 

// 复杂元素

Node word = new Word() ;

Folder folder = new Folder() ;

 

folder.add(mp3); 

folder.add(word);

 

Folder root = new Folder() ;

root.add(folder); 

root.add(word);

 

root.copy();

}

}

 

 

可以看出,使用组合模式,树形结构的元素(简单元素或者复杂元素),对客户端的调用来说,是解耦的。

 

组合模式通用类图

 

------

  文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

  

 

 

 

转载于:https://www.cnblogs.com/sten/p/3348382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值