题目
介绍下装饰模式
答案
装饰模式(Decorator Pattern)动态地给对象添加额外功能,而无需修改类。
适用场景:
- 不想通过继承扩展类的功能。
- 需要为对象添加职责,但不影响其他对象。
示例:饮料加配料
```java
// 抽象组件
interface Drink {
String getDescription();
double cost();
}
// 具体组件
class Coffee implements Drink {
public String getDescription() { return "Coffee"; }
public double cost() { return 5.0; }
}
// 装饰器
abstract class DrinkDecorator implements Drink {
protected Drink drink;
public DrinkDecorator(Drink drink) {
this.drink = drink;
}
}
// 具体装饰器
class Milk extends DrinkDecorator {
public Milk(Drink drink) { super(drink); }
// 添加功能
public String getDescription() {
return drink.getDescription() + " + Milk";
}
// 添加功能
public double cost() {
return drink.cost() + 1.5;
}
}
// 测试
public class DecoratorTest {
public static void main(String[] args) {
Drink drink = new Coffee();
drink = new Milk(drink);
System.out.println(drink.getDescription() + " $" + drink.cost());
}
}
```
