一、装饰者模式
abstract class Car {
protected String name;
abstract void start();
abstract void stop();
}
1、装饰者和被装饰者同时实现一个接口或继承同一个类Car
2、装饰者持有被装饰者的引用
被装饰者:
public class BMW extends Car {
public BMW() {
this.name = "宝马";
}
@Override
void start() {
System.out.println(this.name + "启动了");
}
@Override
void stop() {
System.out.println(this.name + "停止了");
}
}
装饰者:
public class CarWrapper extends Car {
private Car car;
public CarWrapper(Car car) {
this.car = car;
}
@Override
void start() {
//装饰的方法
System.out.println(car.name + "加装尾翼,启动了");
}
@Override
void stop() {
car.stop();
}
}
3、调用
BMW bwm=new BMW();
CarWrapper wrap = new CarWrapper(bwm);
wrap.start();
wrap.stop();