美文网首页
(设计模式原则)SOLID D原则 -- 依赖倒置原则

(设计模式原则)SOLID D原则 -- 依赖倒置原则

作者: 乔什华 | 来源:发表于2016-10-01 14:38 被阅读0次

    面向接口编程的思想

    定义D

    高层模块不应该依赖低层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。针对接口变成,不要对实现编程。

    问题由来

    类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

    解决办法

    解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

    问题代码

    class Book{
        public String getContent(){
            return "很久很久以前有一个阿拉伯的故事……";
        }
    }
    
    class Mother{
        public void narrate(Book book){
            System.out.println("妈妈开始讲故事");
            System.out.println(book.getContent());
        }
    }
    
    public class Client{
        public static void main(String[] args){
            Mother mother = new Mother();
            mother.narrate(new Book());
        }
    }
    

    需求变化

    运行良好,假如有一天,需求变成这样:不是给书而是给一份报纸,让这位母亲讲一下报纸上的故事,报纸的代码如下:

    class Newspaper{
        public String getContent(){
            return "林书豪38+7领导尼克斯击败湖人……";
        }
    }
    
    

    修改代码

    interface IReader{
        public String getContent();
    }
    
    class Newspaper implements IReader {
        public String getContent(){
            return "林书豪17+9助尼克斯击败老鹰……";
        }
    }
    class Book implements IReader{
        public String getContent(){
            return "很久很久以前有一个阿拉伯的故事……";
        }
    }
    
    class Mother{
        public void narrate(IReader reader){
            System.out.println("妈妈开始讲故事");
            System.out.println(reader.getContent());
        }
    }
    
    public class Client{
        public static void main(String[] args){
            Mother mother = new Mother();
            mother.narrate(new Book());
            mother.narrate(new Newspaper());
        }
    }
    

    优点

    1. 面向接口编程依赖抽象而不依赖细节,所以在修改某个类的代码时,不会牵涉到其他类的修改,显著降低系统风险,提高系统健壮性。

    2. 在我们实际项目开发中,都是多人团队协作,每人负责某一模块。比如一个人负责开发People模块,一人负责开发Fruit模块,如果未采用依赖倒置原则,没有提取抽象,那么开发People模块的人必须等Fruit模块开发完成后自己才能开发,否则编译都无法通过,这就是单线程的开发。为了能够两人并行开发,设计时遵循依赖倒置原则,提取抽象,就可以大大提高开发进度。

    Reference

    卡奴达摩专栏 -- 设计模式六大原则(3):依赖倒置原则

    相关文章

      网友评论

          本文标题:(设计模式原则)SOLID D原则 -- 依赖倒置原则

          本文链接:https://www.haomeiwen.com/subject/eybryttx.html