栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

定义两个基础接口 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();
        
        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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号