对“依赖倒置原则”的理解

设计模式原则-依赖倒置原则

一句话说就是:上层模块应该依赖抽象,而不应该依赖具体的实现;抽象不应该依赖细节;细节应该依赖抽象。

上层的意思就是依赖方,例如一个人出远门需要依赖交通工具,下层就是被依赖方,如交通工具。交通工具包括大巴、火车、飞机、高铁等。

反例:按照下面UML图,我们将实现代码写出来;


class Car {
    public void drive() {
        System.out.println("汽车...");
    }
}

class Train {
    public void drive() {
        System.out.println("火车...");
    }
}

class Plane {
    public void drive() {
        System.out.println("飞机...");
    }
}

public class Person {
    public void ride(Car car) {
        car.drive();
    }

    public void ride(Train car) {
        car.drive();
    }

    public void ride(Plane car) {
        car.drive();
    }


    public static void main(String[] args) {
        Person person = new Person();
        person.ride(new Car());
        person.ride(new Train());
        person.ride(new Plane());
    }
}

可以看到每个种类的交通工具都需要去重载一个方法才能执行,要是有100种交通出行方式,则需要写100个重载,这是非常臃肿的,下面我们使用依赖倒置原则看看正例如何解决。

 

正例:按照下面正例的UML图,我们将实现代码写出来;


/**
 * 定义抽象
 */
interface Vehicle {
    void drive();
}

class Car implements Vehicle {
    @Override
    public void drive() {
        System.out.println("汽车...");
    }
}

class Train implements Vehicle {
    @Override
    public void drive() {
        System.out.println("火车...");
    }
}

class Plane implements Vehicle {
    @Override
    public void drive() {
        System.out.println("飞机...");
    }
}

public class Person {
    /**
     * 去掉多余重载用统一接口接收参数
     * @param vehicle
     */
    public void ride(Vehicle vehicle) {
        vehicle.drive();
    }


    public static void main(String[] args) {
        Person person = new Person();
        person.ride(new Car());
        person.ride(new Train());
        person.ride(new Plane());
    }
}

可以看到原本上层依赖的箭头是向下依赖的,而加了统一抽象后,上层依赖了抽象,实现的箭头则“倒置”了;我们即使如何扩展交通工具也不需要改变客户端的调用,只需要实现统一的抽象即可,这样就实现了客户端的解耦。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值