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<Component> list = new ArrayList<Component>();
	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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值