装饰模式

装饰模式

首先装饰模式不是代码,是一种编写逻辑思想。

适合场景:一个人点餐。碗筷必需品,其他的都可以随意添加。

他方理解:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

我的理解:保存最基础的功能,其他类做出对应补充

具体例子:

  1. 创建一个超类,所有的类都继承或实现。可以定义成接口类型
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:02
 * @Description: 超类 吃
 */
public abstract class Eat {

	protected void pre() {}

	protected void after(){}
}
  1. 基础类 和超类进行绑定关系
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:08
 * @Description:
 */
public class BaseEat extends Eat {

	@Override
	protected void pre() {
		System.out.println("第一准备碗筷");
	}

	@Override
	protected void after() {
		System.out.println("运动员正在玩");
	}
}

  1. 最终应用类
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:10
 * @Description: 篮球运动员
 */
public class FatterEat extends Eat{

	Eat eat ;

	public FatterEat(Eat eat) {
		this.eat = eat;
	}

	@Override
	protected void pre() {
		eat.pre();
		doSomething();
	}

	@Override
	protected void after() {
		eat.after();
	}

	void doSomething(){
		System.out.println("胖的,想先吃两个热狗先");
	}

}

package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:25
 * @Description:
 */
public class ThinEat extends Eat {

	Eat eat;

	public ThinEat(Eat eat) {
		this.eat = eat;
	}

	@Override
	protected void pre() {
		eat.pre();
		thinDoing();
	}

	@Override
	protected void after() {
		eat.after();
	}

	void thinDoing(){
		System.out.println("苗条的人 想安静的等待别人点单");
	}

}

  1. 测试类
package com.dawn.design.decorate;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 11:12
 * @Description:
 */
public class TestEat {

	public static void main(String[] args) {

		/**
		 * 第一准备碗筷
		 * 胖的,想先吃两个热狗先
		 */
		Eat eat = new FatterEat(new BaseEat());
		eat.pre();

		/**
		 * 第一准备碗筷
		 * 苗条的人 想安静的等待别人点单
		 */
		Eat e = new ThinEat(new BaseEat());
		e.pre();

		/**
		 * 第一准备碗筷
		 * 胖的,想先吃两个热狗先
		 * 苗条的人 想安静的等待别人点单
		 */
		Eat e2 = new ThinEat(new FatterEat(new BaseEat()));
		e2.pre();
	}
}

总结

优点: 方便方法的扩展,不想extends增加代码冗余量。可以针对不同的个体创建不同的行为数据
缺点: 每次使用会创建许多对象。过多的小类会让我们的系统变得很复杂。对内存考验极大。

结束语

装饰器模式有利有弊(更多的是利大于弊),我们可以好好思考装饰者模式应用场景,然后进一步掌握这种设计思想。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值