java中的装饰者模式_Java中的装饰者模式

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案

接下来举一个例子来说明,这个例子是Head Frist 设计模式中的一个例子

场景:在星巴克的咖啡销售系统中,提供咖啡和调料的组合,并且在用户选好了咖啡和调料之后自动计算价格

某客户点了 浓缩咖啡加摩卡加牛奶的组合

首先是饮料类的抽象类

package com.zw.mymaven;

//饮料的抽象类

public abstract class Beverage {

String description = "Unknown Beverage";

//描述

public String getdescribtion() {

return description;

}

//花 费

public abstract double cost();

}调料类的抽象类

package com.zw.mymaven;

//调料类,也是装饰者类

public abstract class CondimentDecorrator {

//这里要重写getDescribtion的原因

//所谓装饰者类 其实就是包含被装饰者的类

//那么被装饰者和装饰者中的共有的还没定义的方法在这里定义

public abstract String getDescribtion();

}

浓缩咖啡类

package com.zw.mymaven;

//浓缩咖啡的饮料类的实现

public class Espresso extends Beverage {

public Espresso() {

description = "这是一杯浓缩咖啡";

}

@Override

public double cost() {

return 1;

}

}摩卡类

package com.zw.mymaven;

public class Moka extends CondimentDecorrator {

Beverage beverage;

public Moka(Beverage beverage) {

this.beverage = beverage;

}

@Override

public String getDescribtion() {

return beverage.getdescribtion() + "加了摩卡,";

}

public double cost() {

return beverage.cost() + 2;

}

}

牛奶类

package com.zw.mymaven;

public class Milk extends CondimentDecorrator {

Beverage beverage;

public Milk(Beverage beverage) {

this.beverage = beverage;

}

@Override

public String getDescribtion() {

return beverage.getdescribtion() + "加了牛奶,";

}

public double cost() {

return beverage.cost() + 3;

}

}测试类

package com.zw.mymaven;

public class Test3 {

public static void main(String[] args) {

// 点一杯浓缩咖啡

Beverage espresso = new Espresso();

// 加入摩卡

espresso = new Moka(espresso);

// 加入牛奶

espresso = new Milk(espresso);

System.out.println(espresso.getdescribtion() + "花费了" + espresso.cost());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值