您的位置:首页 > 其它

设计模式之装饰者模式

2016-07-21 17:40 176 查看
本文是本人在看Head First设计模式中的装饰者模式后根据个人的理解写下的,若有错误之处,请批评指出。

继承与装饰者模式:利用继承设计子类的行为,是在编译时静态决定,而且所有子类都会继承到相同的行为。装饰者模式利用组合和委托的做法在运行时动态地扩展对象的行为

设计原则:类应该对扩展开放,对修改关闭

装饰者模式的特点:

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

2.一个对象能被一个或多个的装饰者装饰

3.装饰过的对象能替代被装饰的对象

4.装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的行为,已达到特定的目的

5.对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰对象

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

装饰者模式的类图:



实例的类图:



实例代码:

Beverage类:

public abstract class Beverage {
String description = "Unknown Beverage";

public String getDescription(){
return description;
}

public abstract double cost();
}


DarkRoast类:

public class DarkRoast extends Beverage{

public DarkRoast(){
description = "DarkRoast";
}

public double cost() {
// TODO Auto-generated method stub
return 0.99;
}

}


Condiment类:

public abstract class Condiment extends Beverage{
public abstract String getDescription();
}
}


Mocha类:

public class Mocha extends Condiment{

Beverage beverage;

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

public String getDescription() {
return beverage.getDescription() + ", Mocha";
}

public double cost() {
return 0.2 + beverage.cost();
}

}


Driver类:

public class Driver {
public static void main(String[] args) {
Beverage darkroast = new DarkRoast();
System.out.println(darkroast.getDescription() + " $ " + darkroast.cost());

Beverage darkroastWithMocha = new DarkRoast();
darkroastWithMocha = new Mocha(darkroastWithMocha );
System.out.println(darkroastWithMocha.getDescription() + " $ " + darkroastWithMocha.cost());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息