Java设计模式之------装饰模式

概述:在不改变一个对象本身功能的基础上给对象增加额外的新行为,是继承的替代方案。

优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些                        功能。

缺点:正因为可以随意组合,所以就可能出现一些不合理的逻辑。

就如同手机,刚开始的时候只能打电话,随着时间的推移,他能设置彩铃,发送短信,听音乐。下面用一段代码模拟。

先定义一个基本的手机接口

public interface Phone {
	public void call();
}

实现这个接口,完成基本的打电话功能

public class IPhone implements Phone {
	@Override
	public void call() {
		System.out.println("手机可以打电话");
	}
}

现在需要设置彩铃,我们定义个装饰类

public abstract class PhoneDecorate implements Phone {
	private Phone phone;

	public PhoneDecorate(Phone phone) {
		this.phone = phone;
	}

	@Override
	public void call() {
		this.phone.call();
	}
}

装饰彩铃

public class RingPhone extends PhoneDecorate {
	public RingPhone(Phone phone) {
		super(phone);
	}

	@Override
	public void call() {
		System.out.println("手机可以听彩铃");
		super.call();
	}
}

 还可以添加一些其他功能

public class MusicPhone extends PhoneDecorate {
	public MusicPhone(Phone phone) {
		super(phone);
	}

	@Override
	public void call() {
		super.call();
		System.out.println("手机可以听音乐");
	}
}
public class MessagePhone extends PhoneDecorate {
	public MessagePhone(Phone phone) {
		super(phone);
	}
	
	@Override
	public void call() {
		super.call();
		System.out.println("手机可以发短信");
	}
}

至此这个手机就装饰好了

比如

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Scanner sc = new Scanner(System.in);

这些也是用的装饰模式

猜你喜欢

转载自blog.csdn.net/loli_kong/article/details/87971131
今日推荐