设计模式之——装饰者模式
程序员文章站
2022-07-13 11:10:51
...
装饰者模式要点:
1. 装饰着与被装饰者拥有共同的超类
2. 继承的目的是实现类型的继承(从而实现行为的扩展)
3. 行为扩展(最终目的)
场景: 拥有主体类型或业务逻辑,但又具有个性化的处理场景
举例: 不同的咖啡不同的价格,但是计算价格的模式是一样的
代码如下
//运行结果:
[img]
[/img]
1. 装饰着与被装饰者拥有共同的超类
2. 继承的目的是实现类型的继承(从而实现行为的扩展)
3. 行为扩展(最终目的)
场景: 拥有主体类型或业务逻辑,但又具有个性化的处理场景
举例: 不同的咖啡不同的价格,但是计算价格的模式是一样的
代码如下
/** * 超类 咖啡 * @author john * */ public abstract class Coffe { //价格 public abstract double cost(); } /** * 摩卡咖啡(被装饰者) * @author john * */ public class MokaCoffe extends Coffe { @Override public double cost() { // TODO 自动生成的方法存根 return 2.0; } } /** * Nes咖啡 被装饰者 * @author john * */ public class NesCoffe extends Coffe { @Override public double cost() { // TODO 自动生成的方法存根 return 3.0; } } /** * 调料组件(装饰者组件) * @author john * */ public abstract class CompentDecorate extends Coffe { @Override public abstract double cost(); } /** * 奶油调料(装饰者) * @author john * */ public class MilkCondiment extends CompentDecorate { private Coffe coffe; public MilkCondiment(){ } public MilkCondiment(Coffe coffe){ this.coffe = coffe; } @Override public double cost() { // TODO 自动生成的方法存根 return 0.2+coffe.cost(); } } /** * 糖调料 (装饰者) * @author john * */ public class sugarCondiment extends CompentDecorate { private Coffe coffe; public sugarCondiment(){ } public sugarCondiment(Coffe coffe){ this.coffe = coffe; } @Override public double cost() { // TODO 自动生成的方法存根 return 0.1+coffe.cost(); } } public class Test { public static void main(String[] args){ //咖啡 2.0 Coffe mokaCoffe = new MokaCoffe(); //扩展行为(价格) //加牛奶的咖啡 0.2 mokaCoffe = new MilkCondiment(mokaCoffe); System.out.println(mokaCoffe.cost()); //加糖的咖啡 0.1 mokaCoffe = new sugarCondiment(mokaCoffe); System.out.println(mokaCoffe.cost()); } }
//运行结果:
[img]
[/img]
上一篇: 设计模式之——简单工厂模式
下一篇: 设计模式之——抽象工厂模式