软考
APP下载

装饰者模式类图

装饰者模式是一种设计模式,它允许您通过对对象的外部进行包装,来动态地改变其行为。这个模式属于结构模式,因为它可以对已有结构进行修改,而不必改变其内容。通过增加一个装饰类,可以给原始对象添加新的功能。本文将探讨装饰者模式的基本概念、类图、实例以及适用场景。

1.基本概念

装饰者模式有三个关键类:抽象基类、具体类和装饰类。抽象基类是定义了需要包装的接口,具体类提供了各种实现,在不使用装饰类的情况下,这些类可以直接使用。装饰类能够在运行时给具体类添加新的功能。

2.类图

装饰者模式类图由四部分组成:抽象基类(Component)、具体类(ConcreteComponent)、装饰类(Decorator)以及具体装饰类(ConcreteDecorator)。

- Component:定义了需要包装的接口。

- ConcreteComponent:提供了具体实现,可以直接使用。

- Decorator:维护一个指向抽象基类的引用,并且提供了添加新功能的方法。

- ConcreteDecorator:提供了具体的装饰行为。

下面是装饰者模式的类图:

![Decorator Pattern Class Diagram](https://i.imgur.com/cA6gBlF.png)

3.实例

以咖啡为例,咖啡作为抽象基类(Component),提供了描述咖啡的方法,而Espresso、DarkRoast等具体类(ConcreteComponent)则提供了各种实现。装饰类(Decorator)Milk、Mocha则提供了在咖啡中加入牛奶、摩卡等功能。具体装饰类(ConcreteDecorator)就是将Milk、Mocha等装饰类添加到具体类中的实现类。

下面是咖啡场景的实现示例代码:

```

public interface Beverage {

String getDescription();

double cost();

}

public class Espresso implements Beverage {

public String getDescription() {

return "Espresso";

}

public double cost() {

return 1.99;

}

}

public class Milk implements Beverage {

private Beverage beverage;

public Milk(Beverage beverage) {

this.beverage = beverage;

}

public String getDescription() {

return beverage.getDescription() + ", Milk";

}

public double cost() {

return .10 + beverage.cost();

}

}

public class Mocha implements Beverage {

private Beverage beverage;

public Mocha(Beverage beverage) {

this.beverage = beverage;

}

public String getDescription() {

return beverage.getDescription() + ", Mocha";

}

public double cost() {

return .20 + beverage.cost();

}

}

```

4.适用场景

- 需要在不修改原始代码的情况下添加新功能。

- 需要动态地扩展功能。装饰者模式适用于动态添加新功能的情况,例如通过防火墙或安全索引添加新功能。

- 需要对功能进行分层。

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库