Java工作知识

设计原则:依赖倒置原则

2019-07-08  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读