美文网首页Java工作知识
设计原则:依赖倒置原则

设计原则:依赖倒置原则

作者: 谁家的猪 | 来源:发表于2019-07-08 17:42 被阅读1次

    定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象
    抽象不应该依赖细节;细节应该依赖抽象
    针对接口编程,不要针对实现编程
    优点:可以减少类间的耦合性,提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险

    示例

    实现Lily学习的功能(1)

    目录结构

    目录结构.png

    代码实现

    1. 创建Lily类
    /**
     * @author lijiayin
     */
    public class Lily {
        
        public void studyJava(){
            System.out.println("学习Java");
        }
    
        public void studyPython(){
            System.out.println("学习Python");
        }
    }
    
    1. 创建测试类测试
    /**
     * @author lijiayin
     */
    public class Test {
    
        public static void main(String[] args) {
            Lily lily = new Lily();
            lily.studyJava();
            lily.studyPython();
        }
    }
    
    1. 测试结果


      测试结果.png

    实现Lily学习的功能(2)

    还想学习Go怎么办?

    目录结构

    目录结构.png

    代码实现

    1. 创建ICourse接口
    /**
     * @author lijiayin
     */
    public interface ICourse {
        
        void studyCourse();
    }
    
    
    1. 创建三个学习类:JavaCourse、PythonCourse、GoCourse
    /**
     * @author lijiayin
     */
    public class JavaCourse implements ICourse {
        @Override
        public void studyCourse() {
            System.out.println("学习Java");
        }
    }
    
    /**
     * @author lijiayin
     */
    public class PythonCourse implements ICourse {
        @Override
        public void studyCourse() {
            System.out.println("学习Python");
        }
    }
    
    
    /**
     * @author lijiayin
     */
    public class GoCourse implements ICourse {
        @Override
        public void studyCourse() {
            System.out.println("学习Go");
        }
    }
    
    1. 修改 Lily类
    /**
     * @author lijiayin
     */
    public class Lily {
        
        public void studyCourse(ICourse iCourse){
            iCourse.studyCourse();
        }
    }
    
    1. 修改测试类
    /**
     * @author lijiayin
     */
    public class Test {
    
        public static void main(String[] args) {
            Lily lily = new Lily();
            lily.studyCourse(new JavaCourse());
            lily.studyCourse(new PythonCourse());
            lily.studyCourse(new GoCourse());
        }
    }
    
    1. 测试结果


      测试结果.png

    实现Lily学习的功能(3)

    目录结构.png

    代码实现

    1. 修改Lily类
    /**
     * @author lijiayin
     */
    public class Lily {
        
        private ICourse iCourse;
        
        public Lily(ICourse iCourse){
            this.iCourse = iCourse;
        }
        
        public void studyCourse(){
            this.iCourse.studyCourse();
        }
    }
    
    1. 修改测试类
    /**
     * @author lijiayin
     */
    public class Test {
    
        public static void main(String[] args) {
            Lily lily = new Lily(new GoCourse());
            lily.studyCourse();
        }
    }
    
    1. 测试结果


      测试结果.png

    实现Lily学习的功能(4)

    目录结构.png

    代码实现

    1. 修改Lily类
    /**
     * @author lijiayin
     */
    public class Lily {
        
        private ICourse iCourse;
        
        public void studyCourse(){
            this.iCourse.studyCourse();
        }
    
        public void setiCourse(ICourse iCourse) {
            this.iCourse = iCourse;
        }
    }
    
    1. 修改测试类
    /**
     * @author lijiayin
     */
    public class Test {
    
        public static void main(String[] args) {
            Lily lily = new Lily();
            lily.setiCourse(new JavaCourse());
            lily.studyCourse();
            lily.setiCourse(new PythonCourse());
            lily.studyCourse();
            lily.setiCourse(new GoCourse());
            lily.studyCourse();
        }
    }
    
    1. 测试结果


      测试结果.png
    2. UML图


      UML.png

    相关文章

      网友评论

        本文标题:设计原则:依赖倒置原则

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