面向接口编程, 使用接口隔离, 实现Java中的依赖反转

本文介绍了定义的IVehicle和IWeapon接口,展示了ITank类继承这两个接口并创建 HeavyTank和LightTank实例。同时,Driver和DiverPlus驾驶员的不同行为和ITank的多态应用被详细展示。

定义两个基础接口 IVehicle 和IWeapon

package InterFace1;

public interface IVehicle {
     void Run();
}

package InterFace1;

public interface IWeapon {
    void Fire();
}

使用ITank, 继承 上面2个接口IVehicle 和IWeapon

package InterFace1;

public interface ITank extends IVehicle,IWeapon {
    @Override
    void Run() ;

    @Override
    void Fire();
}

建立2个类, 轻型坦克和中型坦克, 他们都继承于 ITANK

package InterFace1;

public class HeavyTank implements ITank {
    @Override
    public void Run() {
        System.out.println("HeavyTank is running!");
    }

    @Override
    public void Fire() {
        System.out.println("Boom!!!!!!!");
    }
}

package InterFace1;

public class LightTank implements ITank {
    @Override
    public void Run() {
        System.out.println("LightTank is running!");
    }

    @Override
    public void Fire() {
        System.out.println("Boom!");
    }
}

建立一个货车类, 它继承于IVehicle

package InterFace1;

public class Truck implements IVehicle {
    @Override
    public void Run() {
        System.out.println("Truck is running!");
    }
}

建立一个普通驾驶员, 这相当于一个数据仓库, 这个驾驶员能传入IVehicle类型的参数 ,屏蔽掉Fire

package InterFace1;

public class Driver {
    public Driver(IVehicle vehicle) {
        this.vehicle = vehicle;
    }
    private IVehicle vehicle;

    public void Run()
    {
        vehicle.Run(); //没有了weapon选项
    }
}

建立一个超级驾驶员, 这相当于一个数据仓库, 这个驾驶员只能传入ITank 类型的参数, 拥有Fire 和Run 2个方法

package InterFace1;

public class DiverPlus {
    public DiverPlus(ITank tank) {
        this.vehicle = tank;
    }
    private ITank vehicle;

    public void Run()
    {
        vehicle.Run();
    }

    public void Fire()
    {
        vehicle.Fire();
    }
}

在main 函数中实现

package InterFace1;

import com.sun.tools.javac.Main;


public class TestDemon {
    public static void main(String[] args) {
//        LockDoor lockDoor = new LockDoor();
//        lockDoor.openDoor();
//        lockDoor.openLock();
//        lockDoor.closeDoor();
//        lockDoor.closeLock();
//        lockDoor.photo();
//        System.out.println(LockDoor.a);

        ITank heavyTank = new HeavyTank();
        DiverPlus heavyTankdriver = new DiverPlus(heavyTank);
        heavyTankdriver.Run();
        heavyTankdriver.Fire();
        System.out.println("------------------------");
        //用接口实现多态
        //DiverPlus 有2种方法, Run和Fire, 它的构造函数中传入形参的类型为ITank,而ITank继承于IVehicle与IWeapon
        ITank lightTank = new LightTank();
        DiverPlus lightTankdriver = new DiverPlus(lightTank);
        lightTankdriver.Run();
        lightTankdriver.Fire();
        System.out.println("------------------------");

        //Driver 有1种方法, Run, 它的构造函数中传入形参的类型为IVehicle
        IVehicle truck = new Truck();
        Driver truckDiver = new Driver(truck);
        truckDiver.Run();
        /*
        *   ITank继承IVehicle,IVehicle是ITank的父类, Driver的构造函数
            public Driver(IVehicle vehicle){}中, IVehicle是父类, 所以 ITank 类型的 lightTank
            也可以填入public Driver(IVehicle vehicle) 中, 只是屏蔽掉了Fire方法
            左边为父类
        *
        * */
        System.out.println("------------------------");
        Driver miniDriver = new Driver(lightTank);
        miniDriver.Run();

    }
}

结果 :

HeavyTank is running!
Boom!!!!!!!
------------------------
LightTank is running!
Boom!
------------------------
Truck is running!
------------------------
LightTank is running!

Process finished with exit code 0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值