装饰器模式是一种结构型设计模式,它允许你在不改变对象自身的情况下动态地给对象添加新的功能。这种模式通过将对象放入装饰器对象中,然后将装饰器对象包装在其他装饰器对象中,以实现各种功能的组合。这种模式符合开放封闭原则,即对扩展是开放的,对修改是封闭的。
以下是装饰器模式的一般结构:
-
Component(组件):定义了一个对象接口,可以给这些对象动态地添加功能。
-
ConcreteComponent(具体组件):实现了Component接口的具体对象。
-
Decorator(装饰器):持有一个Component对象的引用,并定义一个与Component接口一致的接口。
-
ConcreteDecorator(具体装饰器):实现了Decorator接口的具体装饰器,负责给Component对象添加新的功能。
下面是一个简单的Java示例,演示了如何使用装饰器模式:文章来源:https://www.toymoban.com/news/detail-861509.html
// 1. Component
interface Coffee {
double getCost();
String getDescription();
}
// 2. ConcreteComponent
class SimpleCoffee implements Coffee {
@Override
public double getCost() {
return 1.0;
}
@Override
public String getDescription() {
return "Coffee";
}
}
// 3. Decorator
abstract class CoffeeDecorator implements Coffee {
protected Coffee decoratedCoffee;
public CoffeeDecorator(Coffee decoratedCoffee) {
this.decoratedCoffee = decoratedCoffee;
}
public double getCost() {
return decoratedCoffee.getCost();
}
public String getDescription() {
return decoratedCoffee.getDescription();
}
}
// 4. ConcreteDecorator
class MilkDecorator extends CoffeeDecorator {
public MilkDecorator(Coffee decoratedCoffee) {
super(decoratedCoffee);
}
public double getCost() {
return super.getCost() + 0.5;
}
public String getDescription() {
return super.getDescription() + ", Milk";
}
}
// 5. 使用示例
public class Main {
public static void main(String[] args) {
// 制作一杯简单咖啡
Coffee simpleCoffee = new SimpleCoffee();
System.out.println("Cost: " + simpleCoffee.getCost() + ", Description: " + simpleCoffee.getDescription());
// 给简单咖啡加入牛奶
Coffee milkCoffee = new MilkDecorator(simpleCoffee);
System.out.println("Cost: " + milkCoffee.getCost() + ", Description: " + milkCoffee.getDescription());
}
}
在这个示例中,SimpleCoffee是具体组件,MilkDecorator是具体装饰器。我们可以动态地给简单咖啡添加额外的功能,比如牛奶。文章来源地址https://www.toymoban.com/news/detail-861509.html
到了这里,关于Java设计模式中装饰器模式(套娃)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!