开闭原则 依赖倒置原则_坚实原则:依赖倒置原则

开闭原则 依赖倒置原则

到目前为止,我们只研究了单一职责打开/关闭liskov替换接口隔离原则。
依赖倒置是我们所要研究的最后一个原理之一。
该原则指出

答:高级模块不应依赖于低级模块。 两者都应依赖抽象。
B.抽象不应依赖细节。 细节应取决于抽象。

让我们开始一些违反该原理的代码。
作为软件团队,我们需要实施一个项目。 目前,软件团队包括:

后端开发人员

package com.gkatzioura.solid.di;

public class BackEndDeveloper {

    public void writeJava() {
    }
}

还有一个FrontEnd开发人员

package com.gkatzioura.solid.di;

public class FrontEndDeveloper {

    public void writeJavascript() {
    }

}

我们的项目在整个开发过程中都使用。

package com.gkatzioura.solid.di;

public class Project {

    private BackEndDeveloper backEndDeveloper = new BackEndDeveloper();
    private FrontEndDeveloper frontEndDeveloper = new FrontEndDeveloper();

    public void implement() {

        backEndDeveloper.writeJava();
        frontEndDeveloper.writeJavascript();
    }

}

因此,我们可以看到Project类是一个高级模块,它依赖于诸如BackEndDeveloper和FrontEndDeveloper之类的低级模块。 实际上,我们违反了依赖倒置原则的第一部分。

同样通过检查Project.class的实现功能,我们认识到方法writeJava和writeJavascript是绑定到相应类的方法。 关于项目范围,这些都是细节,因为在两种情况下它们都是开发形式。 因此,违反了依赖倒置原则的第二部分。

为了解决这个问题,我们将实现一个称为Developer接口的接口。

package com.gkatzioura.solid.di;

public interface Developer {

    void develop();
}

因此,我们引入一个抽象。

BackEndDeveloper应该重构为

package com.gkatzioura.solid.di;

public class BackEndDeveloper implements Developer {

    @Override 
    public void develop() {
        writeJava();
    }
    
    private void writeJava() {
    }
    
}

并且将FrontEndDeveloper重构为

package com.gkatzioura.solid.di;

public class FrontEndDeveloper implements Developer {

    @Override 
    public void develop() {
        writeJavascript();
    }
    
    public void writeJavascript() {
    }
    
}
[/sourecode]

The next step in order to tackle the violation of the first part would be to refactor the Project class so that it will not depend on the FrontEndDeveloper and the BackendDeveloper class.


package com.gkatzioura.solid.di;

import java.util.List;

public class Project {

    private List<Developer> developers;
    
    public Project(List<Developer> developers) {
    
        this.developers = developers;
    }

    public void implement() {

        developers.forEach(d->d.develop());
    }

}

结果是Project类不依赖于较低级别的模块,而是依赖于抽象。 低层模块及其细节也取决于抽象。

您可以在github上找到源代码。

另外,我还编写了备忘单,其中包含有关扎实原则的摘要。 在链接中注册以接收它。

翻译自: https://www.javacodegeeks.com/2018/02/solid-principles-dependency-inversion-principle.html

开闭原则 依赖倒置原则

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值