Design Pattern | Composite Pattern
by Botao Xiao
Composite Pattern 组合模式
组合模式定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用的过程中无须进行区分,可以对他们进行一致的处理。
如何实现
- 所有的对象都继承同一个接口,而这个接口定义了所有实例都要实现的方法。
- 定义一个组合类,在组合类中定义一个数据结构用于承载这些实例。
- 组合实现方法,遍历数据结构,实现每个实例的方法。
Composition Pattern
- 定义一个公共的接口或是抽象类,定义了统一的方法。
public abstract class File { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void display(); }
- 定义单独的实例,分别实现了私有的方法。
public class TextFile extends File { public TextFile(String name){ setName(name); } @Override public void display() { System.out.println("This is a text file..." + super.getName()); } } public class ImageFile extends File { public ImageFile(String name){ setName(name); } @Override public void display() { System.out.println("This is a image file..." + super.getName()); } } public class VedioFile extends File { public VedioFile(String name) { setName(name); } @Override public void display() { System.out.println("This is a vedio file..." + super.getName()); } }
- 定义了一个组合类,通过数据结构承载了所有的实例对象,通过公共接口(或是抽象类)调用每个实例,运行方法。
public class Folder extends File{ private final List<File> files; //定义一个数据结构承载实例。 public Folder() { files = new ArrayList<File>(); } public void add(File f){ //定义方法的增删改查 files.add(f); } public void remove(File f){ files.remove(f); } @Override public void display() { //遍历对象,使用其方法。 for(File f : files){ f.display(); } } public static void main(String[] args) { Folder folder = new Folder(); TextFile textFile = new TextFile("Test file"); folder.add(textFile); ImageFile imageFile = new ImageFile("Image file"); folder.add(imageFile); VedioFile vedioFile = new VedioFile("Vedio file"); folder.add(vedioFile); folder.display(); } }
Subscribe via RSS