package decorator;
/***
* 抽象接口
* @author zw
*
*/
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) {
super();
this.car = car;
}
@Override
public void move() {
car.move();
}
}
//具体装饰对象
class FlyCar extends SuperCar{
public FlyCar(ICar car) {
super(car);
// TODO Auto-generated constructor stub
}
public void fly() {
System.out.println("可以飞行");
}
public void move() {
super.move();
fly();
}
}
class WaterCar extends SuperCar{
public WaterCar(ICar car) {
super(car);
// TODO Auto-generated constructor stub
}
public void swim() {
System.out.println("可以水上游");
}
public void move() {
super.move();
swim();
}
}
class AICar extends SuperCar{
public AICar(ICar car) {
super(car);
// TODO Auto-generated constructor stub
}
public void autoMove() {
System.out.println("人工智能在陆地上跑");
}
public void move() {
super.move();
autoMove();
}
}
package decorator;
public class Client {
public static void main(String[] args) {
Car car = new Car();
car.move();
System.out.println("增加新功能:天上飞#####");
SuperCar sc = new FlyCar(car);
sc.move();
System.out.println("既能天上飞还能水里游#####");
SuperCar sc1 = new WaterCar(sc);
sc1.move();
}
}