动态地给一个对象添加一些额外的部分;在不改变原来功能的基础上扩展。防止类膨胀。
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() {
super.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();
}