设计模式之 装饰模式

装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

打个比方:一个理发师不会做饭,一个厨子会做饭,他们都实现一个叫做Person的接口,一个理发师想做饭的话,必须持有一个厨子!

共同的接口Person

public interface Person {
	public void cook();
}
有做饭能力的厨子类

public class Cook implements Person {
	@Override
	public void cook() {
		System.out.println("做饭去了");
	}
}
本来不会做饭的理发师类,但是可以通过持有一个会做饭的累的对象实现自己的做饭能力

public class Barber implements Person {	
	private Person mPerson;	
	public Barber(Person mPerson){
		super();
		this.mPerson = mPerson;
	}
	@Override
	public void cook() {	
		System.out.println("before decorator!");
		mPerson.cook();
		System.out.println("after decorator!");
	}
}

测试类:

public class DecoratorTest {
	public static void main(String[] args){
		Person person = new Cook();
		Person obj = new Barber(person);
		obj.cook();
	}
}

打印结果

before decorator!
做饭去了
after decorator!

结论:本来不会做饭的理发师通过持有一个厨子的对象,也会做饭了!厨子装饰了理发师的做饭功能!

恭喜理发师!







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值