装饰器模式

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述

/*****************装饰器设计模式:对真实对象动态的添加功能*************************/

/**
 * 抽象组件
 * @author zhangjianbin
 *
 */
public interface ICar {

    //移动
    void move();
}


/**
 * 俱体构件对象(真实的对象)
 * @author zhangjianbin
 *
 */
class Car implements ICar{

    @Override
    public void move() {
        System.err.println("陆地上跑");
    }   
}

/**
 * 装饰器对象
 *      
 * @author zhangjianbin
 *
 */
class SuperCar implements ICar{

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

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

}

/**
 * 俱类装饰对象
 *      会车游的车
 * @author zhangjianbin
 *
 */
class WeaterCar extends SuperCar{

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

    //添加新的方法
    public void weater(){
        System.err.println("水中游的车");
    }

    //即能飞,又能移动
    @Override
    public void move() {
        super.move();
        weater();
    }

}




/**
 * 俱类装饰对象
 *      会飞的车
 * @author zhangjianbin
 *
 */
class FlayCar extends SuperCar{

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

    //添加新的方法
    public void fly(){
        System.err.println("天上飞的车");
    }

    //即能飞,又能移动
    @Override
    public void move() {
        super.move();
        fly();
    }

}

/**
 * 俱类装饰对象
 *      人工智能的车
 * @author zhangjianbin
 *
 */
class AICar extends SuperCar{

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

    //添加新的方法
    public void autoMove(){
        System.err.println("人工智能车");
    }

    //即能飞,又能移动
    @Override
    public void move() {
        super.move();
        autoMove();
    }

}


public class Clent {

    public static void main(String[] args) {
        ICar car = new Car();
        car.move(); 

        /************对原来的车 添加新的功能:飞车*************/
        ICar flycar = new FlayCar(car);
        flycar.move();

        /************对飞车  添加新的功能:在水中跑*************/
        ICar weater = new WeaterCar(flycar);
        weater.move();

        /************添加两个新的功能:在水中跑,在天上飞*************/
        ICar weater2 = new WeaterCar(new FlayCar(car));
        weater2.move();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值