装饰者模式(自用)

定义:动态地给一个对象添加一些额外的职责。也就是扩展功能,装饰者模式相对于继承产生子类更加灵活,便于代码的复用,就像彩虹(被装饰者),彩虹由好几种颜色(装饰者)组成,颜色可以随意排列、添加。
重点:装饰者与被装饰者拥有共同的基类,继承的目的是继承类型,而不是行为。

代码实现:

/**
 * 被装饰者
 */
public interface Eat {
    public abstract void eat();
}

装饰者

/**
 * 装饰者
 * @author asus
 *
 */
public abstract class AEat implements Eat{
	private Eat eat;
	public AEat(Eat eat) {
		this.eat=eat;
	}
	@Override
	public void eat() {
		eat.eat();
	}

}

对装饰者AEat的一个细化

/**
 * 装饰者
 */
public class BEat extends AEat{
	public BEat(Eat eat) {
		super(eat);
	}
	@Override
	public void eat() {
		super.eat();
		System.out.println("加点醋!");	
	}
/**
 * 装饰者
 */
public class CEat extends AEat {
	public CEat(Eat eat) {
		super(eat);
	}
	@Override
	public void eat() {
		super.eat();;
		System.out.println("多放辣椒");	
	}
}
/**
 * 装饰者
 */
public class DEat extends AEat{
	public DEat(Eat eat) {
		super(eat);
	}
	@Override
	public void eat() {
		super.eat();;
		System.out.println("今天吃鸡");	
	}	
}

/**
 * 被装饰者的实现类,本身就有方式的实现
 */
public class TsetEat implements Eat{
	@Override
	public void eat() {
		System.out.println("我今天吃什么呢?");	
	}
}
/**
 * 测试
 */
public class Test {

	public static void main(String[] args) {
		//创建了一个吃的类,但是不满意现有的行为,还要对这个吃类进行装饰
		Eat eat = new TsetEat();
		//对eat的装饰,可以随意组合装饰者,执行的结果也将不一样。
		Eat e = new CEat(new BEat(new DEat(eat)));
		e.eat();
	}
} 

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值