设计23式—装饰

/*
 * 装饰模式
 * 优点
 * 装饰类和被装饰类可以独立发展,而不会相互耦合
 * 装饰模式是继承关系的一个替代方案
 * 装饰模式可以动态地扩展一个实现类的功
 * 缺点
 * 装饰越多越复杂
 */
public class MyMain {


	public static void main(String[] args) {
		//实例一个礼物
		AbstractGift gift=new Gift();
		//为礼物包装蓝色装饰
		gift=new BlueDecorator(gift);
		//为礼物包装黑色装饰
		gift=new BlackDecorator(gift);
		//为礼物包装红色装饰
		gift=new RedDecorator(gift);
		//展示礼物
		gift.show();
	}


}
//定义一个抽象的礼物(抽象构件)
abstract class AbstractGift{
	//定义一个抽象的方法展示礼物
	abstract void show();
}
//具体的礼物(具体构件:被装饰核心)
class Gift extends AbstractGift{
	@Override
	void show() {
		System.out.println("礼物");
	}
}
//定义一个抽象的礼物装饰(装饰角色)
abstract class AbstractDecorator extends AbstractGift{
	//被装饰的礼物
	private AbstractGift gift;
	public AbstractDecorator(AbstractGift gift) {
		this.gift=gift;
	}
	//展示礼物
	@Override
	public void show() {
		gift.show();
	}
}
//一个具体的蓝色礼物装饰(具体装饰角色)
class BlueDecorator extends AbstractDecorator{


	public BlueDecorator(AbstractGift gift) {
		super(gift);
	}
	//展示装饰
	private void showDecorator() {
		System.out.println("蓝色装饰的");
	}
	@Override
	public void show() {
		showDecorator();
		super.show();
	}
}
//一个具体的红色礼物装饰(具体装饰角色)
class RedDecorator extends AbstractDecorator{


	public RedDecorator(AbstractGift gift) {
		super(gift);
	}
	//展示装饰
	private void showDecorator() {
		System.out.println("红色装饰的");
	}
	@Override
	public void show() {
		showDecorator();
		super.show();
	}
}
//一个具体的黑色礼物装饰(具体装饰角色)
class BlackDecorator extends AbstractDecorator{


	public BlackDecorator(AbstractGift gift) {
		super(gift);
	}
	//展示装饰
	private void showDecorator() {
		System.out.println("黑色装饰的");
	}
	@Override
	public void show() {
		showDecorator();
		super.show();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值