java中装饰者模式的运用实例

版权声明:本文为博主原创文章,转载请声明。 https://blog.csdn.net/qq_32175491/article/details/52642511
题目:豆浆店出售各种豆浆,可以添加材料鸡蛋,黑豆,糖,每种材料的价钱都不一样,请设计一个程序计算豆浆的种类的价钱
装饰者模式概述:
Component(被装饰对象基类)
ConcreteComponent(具体被装饰对象)
Decorator(装饰者抽象类)
ConcreteDecorator(具体装饰者)

Drink.java 被装饰者对象的接口
SoyaBeanMilk.java 具体的被装饰者对象
EggDecorator.java 具体的装饰者对象
SugarDecorator.java 具体的装饰者对象
BlackBeanDecorator.java 具体的装饰者对象
Decorator.java 装饰者基类
Test.java 测试
设计思路:
java中装饰者模式的运用实例
1:首先定义一个Drink接口:
package java243to249;

interface Drink {
//饮料的描述
public String describe();
//饮料的价格
public float cost();

}
2:定义一个豆浆类继承Drink接口
package java243to249;
public class SoyaBeanMilk implements Drink{

@Override
public String describe() {
return "纯豆浆";
}

@Override
public float cost() {
return 5.0f;
}

}
3:定义一个装饰者Decorator基类:
package java243to249;

public abstract class Decorator implements Drink{
private Drink drink;//要装饰的对象

public Decorator(Drink drink){
this.drink=drink;
}
@Override
public String describe() {
return drink.describe();
}

@Override
public float cost() {
return drink.cost();
}

}
4: 定义相关的类去实现Decorator,并满足SoyaBeanMilk的功能:我这里就定义了一个BlackBeanDecorator(黑豆)类了,其他类一样的:
package java243to249;

public class BlackBeanDecorator extends Decorator{

public BlackBeanDecorator(Drink drink) {
super(drink);
// TODO Auto-generated constructor stub
}
public String describe(){
return super.describe()+"黑豆";
}
public float cost(){
return super.cost()+3.0f;
}
}
5: 定义一个主类,测试项目:
package java243to249;

public class Text {

public static void main(String[] args) {
//生产一杯豆浆
Drink d=new SoyaBeanMilk();
//再加点鸡蛋
EggDecorator eg=new EggDecorator(d);
//豆浆里面加带点糖
SugarDecorator sd=new SugarDecorator(eg);
//再加点黑豆
BlackBeanDecorator bbd=new BlackBeanDecorator(sd);
System.out.println("你需要的是: "+bbd.describe());
System.out.println("需支付: "+bbd.cost());
}

}


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页