java装饰器模式案例
时间: 2023-08-01 14:07:29 浏览: 100
java Decorator装饰模式例子
装饰器模式是一种结构型设计模式,它允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。下面是一个使用 Java 实现的装饰器模式案例:
假设有一个咖啡店,咖啡店提供基础的咖啡种类,比如 espresso、latte 等,而且每一种咖啡可以添加额外的配料,比如牛奶、糖浆等。我们可以使用装饰器模式来实现这个场景。
首先,我们定义一个咖啡接口:
```java
public interface Coffee {
double getCost();
String getDescription();
}
```
然后,我们实现基础咖啡类:
```java
public class BasicCoffee implements Coffee {
@Override
public double getCost() {
return 2.0;
}
@Override
public String getDescription() {
return "Basic coffee";
}
}
```
接下来,我们创建一个装饰器类,它将基础咖啡对象包装起来,并在其基础上添加额外的配料:
```java
public abstract class CoffeeDecorator implements Coffee {
protected final Coffee decoratedCoffee;
public CoffeeDecorator(Coffee decoratedCoffee) {
this.decoratedCoffee = decoratedCoffee;
}
public double getCost() {
return decoratedCoffee.getCost();
}
public String getDescription() {
return decoratedCoffee.getDescription();
}
}
```
最后,我们实现具体的装饰器类,比如添加牛奶的装饰器类:
```java
public class MilkDecorator extends CoffeeDecorator {
public MilkDecorator(Coffee decoratedCoffee) {
super(decoratedCoffee);
}
public double getCost() {
return super.getCost() + 0.5;
}
public String getDescription() {
return super.getDescription() + ", with milk";
}
}
```
现在,我们可以使用装饰器模式来创建一个具有不同配料的咖啡对象:
```java
Coffee basicCoffee = new BasicCoffee(); // 创建基础咖啡对象
Coffee milkCoffee = new MilkDecorator(basicCoffee); // 添加牛奶
Coffee syrupCoffee = new SyrupDecorator(milkCoffee); // 添加糖浆
System.out.println(syrupCoffee.getDescription()); // 输出 "Basic coffee, with milk, with syrup"
System.out.println(syrupCoffee.getCost()); // 输出 "3.0"
```
这样,我们就使用装饰器模式为基础咖啡对象添加了不同的配料,同时保持了代码的简洁性和可扩展性。
阅读全文