码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之装饰模式 Decorator

时间:2017-09-04 14:58:22      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:class   新功能   ima   c89   对象   技术   col   system   rri   

 

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

 

代码实现

技术分享
public interface ICar {
    void move();
}
抽象构建角色
技术分享
//具体构件角色(真实对象,被装饰角色)
class Car implements ICar{

    @Override
    public void move() {
        System.out.println("陆地上跑");
    }
    
}
具体构建角色
技术分享
//装饰角色
class SuperCar implements ICar{

    private 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("天上飞");
    }

    @Override
    public void move() {
        // TODO Auto-generated method stub
        super.move();
        fly();
    }    
}


class WaterCar extends SuperCar{

    public WaterCar(ICar car) {
        super(car);
        // TODO Auto-generated constructor stub
    }
    
    public void swim(){
        System.out.println("水中游");
    }

    @Override
    public void move() {
        // TODO Auto-generated method stub
        super.move();
        swim();
    }    
}


class AICar extends SuperCar{

    public AICar(ICar car) {
        super(car);
        // TODO Auto-generated constructor stub
    }
    
    public void autoMove(){
        System.out.println("自动驾驶");
    }

    @Override
    public void move() {
        // TODO Auto-generated method stub
        super.move();
        autoMove();
    }    
}
具体装饰角色
技术分享
public class Client {

    public static void main(String[] args) {
        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("增加两个新功能,飞行,水里游---");
        WaterCar waterCar2 = new WaterCar(new FlyCar(car));
        waterCar2.move();    
    }
}
调用测试

 

设计模式之装饰模式 Decorator

标签:class   新功能   ima   c89   对象   技术   col   system   rri   

原文地址:http://www.cnblogs.com/qingdaofu/p/7473200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!