依赖倒置原则

官方定义

依赖倒转原则,又称依赖倒置原则(Dependence Inversion Principle),又称DIP原则

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

基本介绍
  • 抽象 接口或者抽象类
  • 细节 实现类

换句话说,依赖倒转原则 核心的理念 相对于细节来说,抽象要稳定得多。就是要求我们要面向接口编程
抽象类和接口 价值? 设计

package DependenceInversionPrinciple;

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

interface IMessage {
    void sendMessage();
}

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

class DingDing implements IMessage {
    @Override
    public void sendMessage() {
        System.out.println("钉钉上,老板找你加班了");
    }
}

class WeChat implements IMessage {

    @Override
    public void sendMessage() {
        System.out.println("钉钉不回,老板给你打微信电话了");
    }
}

class Message implements IMessage {

    @Override
    public void sendMessage() {

    }
}
案例总结

依赖倒转原则本质上,就是通过抽象(抽象类和接口)使得各个类或者模块实现彼此独立,互不影响,实现模块间松耦合,要先顶层再细节的方式来进行代码设计

依赖关系的传递方式

一、通过接口传递
//假设消息规范
interface IMessage2{
    void sendMessage(Produce produce);
}

//消息真正的生产者
interface Produce{
    void produceMessage();
}

class Worker2 implements IMessage2 {

    @Override
    public void sendMessage(Produce produce) {
        produce.produceMessage();
    }
}
二、通过构造方法传递
interface IMessage2{
    void sendMessage(Produce produce);
}

//消息真正的生产者
interface Produce{
    void produceMessage();
}

class Worker2 implements IMessage2 {
    public Produce produce;
    public Worker2(Produce produce){
        this.produce = produce;
    }

    @Override
    public void sendMessage(Produce produce) {
        produce.produceMessage();
    }
}

三、通过set()方法传递

interface IMessage2 {
    void sendMessage(Produce produce);
}

//消息真正的生产者
interface Produce {
    void produceMessage();
}

class Worker2 implements IMessage2 {
    public Produce produce;

    public void setProduce(Produce produce) {
        this.produce = produce;
    }

    @Override
    public void sendMessage(Produce produce) {
        produce.produceMessage();
    }
}

注意事项&细节

  • 底层模块尽量都要有抽象类或接口,或者两者都有,程序稳定更好
  • 变量的声明类型尽量是抽象类或者接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化
  • 继承时遵循里氏替换原则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值