Java七大设计原则(4/7)——依赖倒转原则

本文通过实例展示了依赖倒转原则在编程中的重要性。通过对比未使用和使用该原则的代码,说明了如何通过面向接口编程降低模块间的耦合,提高程序的可扩展性和稳定性。在实际工程中,遵循依赖倒转原则可以更方便地添加新的通讯方式,如从微信切换到钉钉。
摘要由CSDN通过智能技术生成

定义

上层模块不应该依赖底层模块,它们都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。

简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。


代码实现

假设现在要叫朋友John上号,选择通过微信发消息。

不使用依赖倒转原则

定义微信类,用来发消息

/**
 * @author John117
 * @date 2022/05/23  17:30
 */
public class WeChat {
    public void sendMessage(){
        System.out.println("微信:速度上号");
    }
}

定义John类,用来接受消息

/**
 * @author John117
 * @date 2022/05/23  17:32
 */
public class John {
    public void getMessage(WeChat weChat){
        weChat.sendMessage();
    }
}

测试

/**
 * @author John117
 * @date 2022/05/23  17:35
 */
public class Test {
    public static void main(String[] args) {
        new John().getMessage(new WeChat());
    }
}

这种设计有个很大的缺点,假如此时想再添加一个通讯方式比如钉钉,在定义钉钉类后,还要去修改John的接受方式。在现实工程中,这种做法工程量太大了。

使用依赖倒转原则

面向接口,定义一个消息类接口IMessage

/**
 * @author John117
 * @date 2022/05/23  17:35
 */
public class Test {
    public static void main(String[] args) {
        new John().getMessage(new WeChat());
    }
}

定义WeChat类,WeChat实现IMessage

/**
 * @author John117
 * @date 2022/05/23  17:37
 */
public class WeChat implements IMessage{
    @Override
    public void sendMessage() {
        System.out.println("微信:速度上号");
    }
}

定义John

/**
 * @author John117
 * @date 2022/05/23  17:37
 */
public class John {
    public void getMessage(IMessage message){
        message.sendMessage();
    }
}

测试

/**
 * @author John117
 * @date 2022/05/23  17:39
 */
public class Test {
    public static void main(String[] args) {
        new John().getMessage(new WeChat());
    }
}

此时,如果想在添加一个通讯方式钉钉,只需定义DingDing类,使DingDing实现IMessage

/**
 * @author John117
 * @date 2022/05/23  17:39
 */
public class DingDing implements IMessage{
    @Override
    public void sendMessage() {
        System.out.println("钉钉:速度上号");
    }
}

在测试类,传入相应消息实体类即可

public class Test {
    public static void main(String[] args) {
        new John().getMessage(new WeChat());
        new John().getMessage(new DingDing());
    }
}

结论

  1. 低层模块尽量都要有抽象类或接口,或者两者都有。

  2. 程序稳定性更好,变量的声明类型尽量是抽象类或者接口,这样我们的变量引用和实际对象间,就存在一个缓冲层, 利于程序扩展和优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值