您的位置:首页 > 编程语言 > Java开发

java设计模式学习之装饰者模式

2015-07-24 22:52 726 查看

设计原则

1.类应该对扩展开放,对修改关闭

装饰者模式

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

1.装饰者和被装饰者对象有相同的超类型

2.对象可以在任何时候被装饰

1编写装饰者和被装饰者的超类型

package decorator;
/**
* 饮料
*/
public abstract class Beverage {

String description = "未知的饮料";

public String getDescription() {
return description;
}

public abstract double cost();
}


2.调料的抽象类(调料)

package decorator;
/**
*调料
*/
public abstract class CondimentDecorator extends Beverage{

public abstract String getDescription();
}


3.饮料的代码

package decorator;

public class HouseBlend extends Beverage{

public HouseBlend() {
description = "我是混合咖啡";
}

@Override
public double cost() {
return 0.99;
}
}


package decorator;
/**
* 浓缩咖啡
*/
public class Espresso extends Beverage{
public Espresso () {
description = "我是浓缩咖啡";
}

@Override
public double cost() {
return 1.99;
}
}


4.实现具体的装饰者(具体的调料)

package decorator;
/**
* 摩卡调料
*/
public class Mocha extends CondimentDecorator{

Beverage beverage;

public Mocha(Beverage beverage) {
this.beverage = beverage;
}

@Override
public String getDescription() {
return beverage.getDescription() + "摩卡调料";
}

@Override
public double cost() {
return beverage.cost() + 0.20;
}
}


5.测试代码

package decorator;

public class test {
public static void main(String[] args) {
Beverage beverage = new Espresso();
System.out.println(beverage.getDescription()+beverage.cost());

Beverage beverage4 = new HouseBlend();
System.err.println(beverage4.getDescription()+beverage4.cost());

Beverage beverage2 = new Espresso();
beverage2 = new Mocha(beverage2);
System.out.println(beverage2.getDescription()+beverage2.cost());

Beverage beverage3 = new HouseBlend();
beverage3 = new Mocha(beverage3);
System.out.println(beverage3.getDescription()+beverage3.cost());
}
}


我是浓缩咖啡1.99

我是混合咖啡0.99

我是浓缩咖啡摩卡调料2.19

我是混合咖啡摩卡调料1.19
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: