Java设计模式:组合模式

组合模式的一个典型应用比如系统的文件系统,文件系统里面有文件和目录,目录里面又有文件。组合模式适合把文件和目录“组合”在一起。File代表文件,Dir代表目录,Component代表一种文件和目录共有的抽象。

public abstract class Component {
	public abstract String getName();

	public abstract void add(Component c);

	public abstract void remove(Component c);

	public abstract void info();
}

 

File代表一个普通文件:


public class File extends Component {
	private String name;

	public File(String name) {
		this.name = name;
	}

	@Override
	public void add(Component entry) {

	}

	@Override
	public void remove(Component entry) {

	}

	@Override
	public String getName() {
		return name;
	}

	@Override
	public void info() {
		System.out.println(name);
	}
}

 

Dir代表一个目录:

import java.util.ArrayList;
import java.util.Iterator;

public class Dir extends Component {
	private ArrayList list = new ArrayList();
	private String name;

	public Dir(String name) {
		this.name = name;
	}

	@Override
	public String getName() {
		return name;
	}

	@Override
	public void add(Component c) {
		list.add(c);
	}

	@Override
	public void remove(Component c) {
		list.remove(c);
	}

	@Override
	public void info() {
		System.out.println(name + "/");

		Iterator it = list.iterator();
		while (it.hasNext()) {
			Component c = (Component) it.next();
			System.out.print(name + "/");
			c.info();
		}
	}
}

 

测试:


public class Demo {
	public Demo() {
		File f1 = new File("f1");
		File f2 = new File("f2");

		Dir d1 = new Dir("d1");
		d1.add(f1);
		d1.add(f2);

		File f3 = new File("f3");

		Dir dir = new Dir("dir");
		dir.add(d1);
		dir.add(f3);

		dir.info();
	}

	public static void main(String[] args) {
		new Demo();
	}
}

 

输出:

dir/
dir/d1/
d1/f1
d1/f2
dir/f3

 

你可能感兴趣的:(Java,设计模式,设计模式与架构设计)