Java装饰器模式

Java装饰器模式

装饰器

装饰器就是将原有的类功能加工新添新的功能

类图在这里插入图片描述

Client为测试类;Vehicle为接口代表交通工具;MultiVehicle实现接口;VehicleDecorator是交通工具装饰器即附加给交通工具其他的功能,如飞行和航行;SwimVehicleDecorator为添加航行功能装饰器,FlyVehicleDecorator为添加飞行功能装饰器

public class Client {
    public static void main(String[] args) {
        /**
         * Test1
         */
        /*
        Vehicle multiVehicle=new MultiVehicle();
        multiVehicle.show();

        System.out.println("----------------");
        VehicleDecorator flyVehicleDecorator=
                new FlyVehicleDecorator(multiVehicle);
        flyVehicleDecorator.show();
         */

        /**
         * Test2
         */
        Vehicle multiVehicle=new MultiVehicle();
        multiVehicle.show();

        System.out.println("----------------");
        VehicleDecorator flyVehicleDecorator=
                new FlyVehicleDecorator(multiVehicle);
        flyVehicleDecorator.show();

        System.out.println("----------------");
        VehicleDecorator swimVehicleDecorator=
                new SwimVehicleDecorator(multiVehicle);
        swimVehicleDecorator.show();
    }
}
public interface Vehicle {
    public void show();
    public void run();
}
public class MultiVehicle implements Vehicle {
    @Override
    public void show() {
        this.run();
    }

    @Override
    public void run() {
        System.out.println("run on the road!");
    }
}
public abstract class VehicleDecorator  {
    protected Vehicle vehicle;

    public VehicleDecorator() {
    }

    public VehicleDecorator(Vehicle vehicle) {
        this.vehicle = vehicle;
    }

    public Vehicle getVehicle() {
        return vehicle;
    }

    public void setVehicle(Vehicle vehicle) {
        this.vehicle = vehicle;
    }

    public abstract void show();
}
public class SwimVehicleDecorator extends VehicleDecorator{
    public SwimVehicleDecorator() {
    }

    public SwimVehicleDecorator(Vehicle vehicle) {
        this.vehicle=vehicle;
    }

    @Override
    public Vehicle getVehicle() {
        return vehicle;
    }

    @Override
    public void setVehicle(Vehicle vehicle) {
        this.vehicle=vehicle;
    }

    @Override
    public void show() {
        this.getVehicle().run();
        this.swim();
    }

    public void swim(){
        System.out.println("swimming is available!");
    }
}

public class FlyVehicleDecorator extends VehicleDecorator {
    public FlyVehicleDecorator() {
    }

    public FlyVehicleDecorator(Vehicle vehicle) {
        this.vehicle=vehicle;
    }

    @Override
    public Vehicle getVehicle() {
        return vehicle;
    }

    @Override
    public void setVehicle(Vehicle vehicle) {
        this.vehicle=vehicle;
    }

    @Override
    public void show() {
        this.getVehicle().run();
        this.fly();
    }

    public void fly(){
        System.out.println("Fly is available!");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值