定义
装饰者模式动态地将责任附加到对象上。 若要扩展功能,装饰者提供了比继承更有弹性 的替代方案。
意义
- 通过动态地组合对象,可以写新的代码添加新功能,而无须修改现有代码。既然没有改变现有代码,那么引进bug或产生意外副作用的机会将大幅度减少
- 用组合(composition)和委托(delegation)可以在
运行时具有继承行为的效果,来代替继承
代码实现
1. 抽象构件
public abstract class AbstractBeverage {
public String description = "UnKnow beverage";
public String getDescription() {
return description;
public abstract double cost();
}
2. 具体构件类
public class HouseBlend extends AbstractBeverage {
public HouseBlend() {
description = "HouseBlend";
}
@Override
public double cost() {
return 1.1;
}
}
3. 抽象装饰类
public abstract class AbstractCondimentDecorator extends AbstractBeverage {
@Override
public abstract String getDescription();
}
4. 具体装饰类
public class Mocha extends AbstractCondimentDecorator {
AbstractBeverage abstractBeverage;
public Mocha(AbstractBeverage abstractBeverage) {
this.abstractBeverage = abstractBeverage;
}
@Override
public String getDescription() {
return abstractBeverage.getDescription()+",Mocha";
}
@Override
public double cost() {
return .20+abstractBeverage.cost();
}
}
5. 测试结果
public class DecoratorTest
@Test
public void costMilkTest(){
AbstractBeverage abstractBeverage = new HouseBlend();
AbstractBeverage abstractBeverage1 = new Mocha(abstractBeverage);
double cost = abstractBeverage1.cost();
assertEquals("not", cost, 1.3);
}
}```
来源:CSDN
作者:newzhong1
链接:https://blog.csdn.net/qq_38212913/article/details/103778602