处理流(概念)以及装饰器模式

**
 *抽象构件角色
 */
public interface ICar {
     void move();
}

/**
 * 具体构件角色(真实对象)
 */
class Car implements ICar{

    @Override
    public void move() {
        System.out.println("在路上跑");
    }
}

/**
 * 装饰角色
 */
class SuperCar implements ICar{
    protected ICar car;

    public SuperCar(ICar car) {
        this.car = car;
    }


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

/**
 * 具体装饰角色
 */
class FlyCar extends SuperCar{

    public FlyCar(ICar car) {
        super(car);
    }

    public void fly(){
        System.out.println("天上飞");
    }

    @Override
    public void move() {
        super.move();
        fly();
    }
}
class WaterCar extends SuperCar{

    public WaterCar(ICar car) {
        super(car);
    }

    public void water(){
        System.out.println("水上游");
    }

    @Override
    public void move() {
        super.move();
        water();
    }
}
class AICar extends SuperCar{

    public AICar(ICar car) {
        super(car);
    }

    public void autoMove(){
        System.out.println("自动驾驶");
    }

    @Override
    public void move() {
        super.move();
        autoMove();
    }
}

调用

Car car = new Car();
        car.move();
        System.out.println("增加一个新功能");
        FlyCar flyCar = new FlyCar(car);
        flyCar.move();
        System.out.println("增加两个新功能");
        WaterCar waterCar = new WaterCar(flyCar);
        waterCar.move();
        System.out.println("增加三个新功能");
        AICar aiCar = new AICar(waterCar);
        aiCar.move();

结果:

在路上跑
增加一个新功能
在路上跑
天上飞
增加两个新功能
在路上跑
天上飞
水上游
增加三个新功能
在路上跑
天上飞
水上游
自动驾驶
经验分享 程序员 微信小程序 职场和发展