一、解释
装饰模式(Decorator Pattern)是一种软件设计模式,用于动态地给对象添加额外的功能,而无需修改其原始类。该模式通过创建一个装饰器类,将原始对象包装在其中,并在运行时动态地添加新的行为或修改现有行为。
在装饰模式中,有一个抽象组件(Component)接口,定义了原始对象和装饰器对象的共同行为。具体组件(Concrete Component)是实现了抽象组件接口的原始对象。装饰器(Decorator)类实现了抽象组件接口,并持有一个抽象组件对象的引用。
通过装饰模式,可以在不改变原始对象结构的情况下,动态地添加新的功能。装饰器类可以在调用原始对象的方法之前或之后执行额外的操作,从而实现对原始对象的包装。
二、 代码示例
interface Car {
void assemble();
}
// 具体组件
class BasicCar implements Car {
@Override
public void assemble() {
System.out.println("Basic Car");
}
}
// 装饰器
abstract class CarDecorator implements Car {
protected Car car;
public CarDecorator(Car car) {
this.car = car;
}
@Override
public void assemble() {
car.assemble();
}
}
// 具体装饰器
class LuxuryCar extends CarDecorator {
public LuxuryCar(Car car) {
super(car);
}
@Override
public void assemble() {
super.assemble();
System.out.println("Adding features of a Luxury Car");
}
}
// 具体装饰器
class SportsCar extends CarDecorator {
public SportsCar(Car car) {
super(car);
}
@Override
public void assemble() {
super.assemble();
System.out.println("Adding features of a Sports Car");
}
}
// 客户端
public class DecoratorPatternExample {
public static void main(String[] args) {
Car basicCar = new BasicCar();
basicCar.assemble();
Car luxuryCar = new LuxuryCar(new BasicCar());
luxuryCar.assemble();
Car sportsLuxuryCar = new SportsCar(new LuxuryCar(new BasicCar()));
sportsLuxuryCar.assemble();
}
}