文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java设计模式七大原则之依赖倒置原则详解

2024-04-02 19:55

关注

定义

依赖倒转原则,又称依赖倒置原则(Dependence Inversion Principle),又称DIP原则,即:上层模块不应该依赖底层模块,它们都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。抽象对代码来说即接口或者抽象类 细节对代码来说即实现类。换句话说 依赖倒转原则的核心的理念 相对于细节来说,抽象要稳定得多。要求我们 面向接口编程,进行设计。

案例

需求

工作人员接收微信老板发来的加班消息

方案一

定义工作人员Worker.java


public class Worker {

    
    public void getMessage(WeChat weChat){
        weChat.sendMessage();
    }
}

定义微信消息类WeChat.java


public class WeChat {

    
    public void sendMessage(){
        System.out.println("微信上,老板找你加班了");
    }
}

定义测试类Test1.java

public class Test1 {

    public static void main(String[] args) {
        new Worker().getMessage(new WeChat());
    }
}

方案二

定义消息接口IMessage.java


public interface IMessage {
    void sendMessage();
}

定义微信消息类WeChatNew.java


public class WeChatNew implements IMessage{

    
    @Override
    public void sendMessage(){
        System.out.println("微信上,老板找你加班了");
    }
}

定义飞书类FeiShu.java


public class FeiShu implements IMessage{

    @Override
    public void sendMessage() {
        System.out.println("飞书上,老板喊你加班了");
    }
}

定义工作人员类WorkerNew.java


public class WorkerNew {
    
    public void getMessage(IMessage iMessage){
        iMessage.sendMessage();
    }
}

定义测试类Test2.java

public class Test2 {
    public static void main(String[] args) {
        // 微信
        new WorkerNew().getMessage(new WeChatNew());
        // 飞书
        new WorkerNew().getMessage(new FeiShu());
    }
}

对比分析

方案一违反了依赖倒置原则,如果功能需求扩展,比如说需要扩展一种飞书发送消息,我们需要新增一个飞书类,并实现发送消息的功能,工作人员的类也需要修改接收消息的方法,客户端也需要进行相应的修改,改动大,风险大。

方案二遵守了依赖倒置原则,同样的需求扩展,抽象一个公共的消息接口,所有的微信,飞书等发送消息的类只要实现该接口,重写发送消息的方法,工作人员的接收消息方法以消息接口为入参,客户端只需要传入相应的消息实体类,扩展方便,耦合低。

总结

通过上面两个案例,我们可以得到以下结论:

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

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

到此这篇关于Java设计模式七大原则之依赖倒置原则详解的文章就介绍到这了,更多相关Java依赖倒置原则内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯