/**
*
- 装饰模式作用:动态的为对象新加功能。继承也可以实现,但是会造成子类迅速膨胀。
*装饰模式的组成: 接口 被装饰列类(具体类) 装饰类 具体装饰类
*
*
*/
public class Decorator {
//测试
public static void main(String[] args) {
//定义被装饰对象
ConcreteCar car = new ConcreteCar();
car.move();
//定义装饰对象
System.out.println("-----------------------");
ConcreteDecorateCar decorateCar = new ConcreteDecorateCar(car);
decorateCar.move();
System.out.println("-----------------------");
ConcreteDecorateCar1 decorateCar1 = new ConcreteDecorateCar1(decorateCar);
decorateCar1.move();
}
}
/**
*
*案例
*/
interface Car{
public void move();
}
class ConcreteCar implements Car{ //被装饰对象
public ConcreteCar() {}
@Override
public void move() {
System.out.println(“在陆地上跑”);
}
}
class DecorateCar implements Car { //装饰类
protected Car car;
public DecorateCar(Car car) {
this.car = car;
}
@Override
public void move() {
car.move();
}
}
class ConcreteDecorateCar extends DecorateCar{ //具体装饰类
public ConcreteDecorateCar(ConcreteCar car) {
super(car);
}
private void fly() { //新增加的功能
System.out.println("天山飞");
}
@Override
public void move() {
super.move();
fly();
}
}
class ConcreteDecorateCar1 extends DecorateCar{ //具体装饰类
public ConcreteDecorateCar1(Car car) {
super(car);
}
private void water() { //新增加的功能
System.out.println("水上游");
}
@Override
public void move() {
super.move();
water();
}
}