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