注:组合模式是结构型设计模式, 将对象组合成树形结构以表示部分整体的关系,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(); } }
可以看出,使用组合模式,树形结构的元素(简单元素或者复杂元素),对客户端的调用来说,是解耦的。
组合模式通用类图
------
文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。