装饰模式

动态地给一个对象添加一些额外的部分。防止子类膨胀。

装饰模式

public interface Car {
    void make();
}

public class Benz implements Car {
    @Override
    public void make() {
        System.out.println("make Benz");
    }
}

public abstract class CarDecorator implements Car {
    Car car;

    public CarDecorator(Car car) {
        this.car = car;
    }

    @Override
    public void make() {
        car.make();
    }
}

public class TailCarDecorator extends CarDecorator {
    public TailCarDecorator(Car car) {
        super(car);
    }

    @Override
    public void make() {
        car.make();
        this.setTail(car);
    }

    // 装饰的方法
    private void setTail(Car car) {
        System.out.println("set tail");
    }
}

@Test
public void decoratorTest() {
    Car benz = new Benz();
    TailCarDecorator tailCarDecorator = new TailCarDecorator(benz);
    tailCarDecorator.make();
}

装饰模式