处理流(概念)以及装饰器模式
**
*抽象构件角色
*/
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();
结果:
在路上跑 增加一个新功能 在路上跑 天上飞 增加两个新功能 在路上跑 天上飞 水上游 增加三个新功能 在路上跑 天上飞 水上游 自动驾驶
