设计模式课程 设计模式精讲 3-4 依赖倒置原则讲解+coding

1    课程讲解

1.1  定义

1.2  优点

1.3  细节描述

2    代码演练

2.0  代码展示优点

2.1  非面向接口编程

2.2  面向接口编程1  传参

2.3  面向接口编程2  构造函数

2.4  面向接口编程3  set方法

1    课程讲解

1.1  定义

◆定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象

1.2  优点

◆优点:降低耦合,提高内聚,增强代码的可维护性。

1.3  细节描述
◆抽象不应该依赖细节;细节应该依赖抽象
◆针对接口编程,不要针对实现编程

每个类尽量实现接口或者抽象类,或者继承抽象类并且实现接口

 

2    代码演练

2.0  代码展示优点

面向接口编程优点:Geely,JavaCourse和PreCourse都不需要动,只扩展其他类和修改test即可

2.1  非面向接口编程

缺点:Test实现依赖于具体实现,对于后续细节频繁的需求变更不适用。

测试类:

package com.geely.design.principle.dependencyinversion;

public class Test {
//v1.1 普通方法调取java类
public static void main(String[] args) {
Geely geely = new Geely();
geely.studyJavaClass();
geely.studyPreClass();
}
}

实体类:

package com.geely.design.principle.dependencyinversion;

public class Geely {
public void studyJavaClass(){
System.out.println("Geely Study Java Lesson");
}
public void studyPreClass(){
System.out.println("Geely Study Pre Lesson");
} }

打印结果:

Geely Study Java Lesson
Geely Study Pre Lesson Process finished with exit code 0

2.2  面向接口编程1  接口方法传参

测试类:

package com.geely.design.principle.dependencyinversion;

public class Test {
//v1.1 普通方法调取java类
/*public static void main(String[] args) {
Geely geely = new Geely();
geely.studyJavaClass();
geely.studyPreClass();
}*/ //v1.2 面向接口编程 传参
public static void main(String[] args) {
Geely geely = new Geely();
geely.studyImoocClass(new JavaCourse());
geely.studyImoocClass(new
PreCourse());
}
}

实体类:

package com.geely.design.principle.dependencyinversion;

public class Geely {
public void studyJavaClass(){
System.out.println("Geely Study Java Lesson");
} public void studyPreClass(){
System.out.println("Geely Study Pre Lesson");
} public void studyImoocClass(Icourse icourse){
icourse.studyClass();
}
}

课程类1:

package com.geely.design.principle.dependencyinversion;

public class JavaCourse implements  Icourse{
@Override
public void studyClass() {
System.out.println("Geely Study Java Lesson");
}
}

课程类2:

package com.geely.design.principle.dependencyinversion;

public class PreCourse implements Icourse{
@Override
public void studyClass() {
System.out.println("Geely Study Pre Lesson2");
}
}

课程接口:

package com.geely.design.principle.dependencyinversion;

public interface Icourse {
void studyClass();
}

打印日志:

Geely Study Java Lesson
Geely Study Pre Lesson2 Process finished with exit code 0

2.3  面向接口编程2  构造函数

测试类:

package com.geely.design.principle.dependencyinversion;

public class Test {
//v1.1 普通方法调取java类
/*public static void main(String[] args) {
Geely geely = new Geely();
geely.studyJavaClass();
geely.studyPreClass();
}*/ //v1.2 面向接口编程 传参
/*public static void main(String[] args) {
Geely geely = new Geely();
geely.studyImoocClass(new JavaCourse());
geely.studyImoocClass(new PreCourse());
}*/ //v1.3 面向接口编程 构造函数
public static void main(String[] args) {
Geely geely = new Geely(new JavaCourse());
geely.studyImoocClass();
}
}

实体类:

package com.geely.design.principle.dependencyinversion;

public class Geely {
Icourse icourse ;
public Geely(Icourse icourse){
this.icourse = icourse;
}
public void studyImoocClass(){
icourse.studyClass();
} }

课程类:

同上

课程接口:

同上

打印日志:

Geely Study Java Lesson

Process finished with exit code 0

2.4  面向接口编程3  set方法

测试类:

package com.geely.design.principle.dependencyinversion;

public class Test {
//v1.1 普通方法调取java类
/*public static void main(String[] args) {
Geely geely = new Geely();
geely.studyJavaClass();
geely.studyPreClass();
}*/ //v1.2 面向接口编程 传参
/*public static void main(String[] args) {
Geely geely = new Geely();
geely.studyImoocClass(new JavaCourse());
geely.studyImoocClass(new PreCourse());
}*/ //v1.3 面向接口编程 构造函数
/*public static void main(String[] args) {
Geely geely = new Geely(new JavaCourse());
geely.studyImoocClass();
}*/ //v1.4 面向接口编程 set方法
public static void main(String[] args) {
Geely geely = new Geely();
geely.setIcourse(new JavaCourse());
geely.studyImoocClass(); geely.setIcourse(new PreCourse());
geely.studyImoocClass();
} }

实体类:

package com.geely.design.principle.dependencyinversion;

public class Geely {
Icourse icourse ; public void setIcourse(Icourse icourse) {
this.icourse = icourse;
}
public void studyImoocClass(){
icourse.studyClass();
} }

打印日志:

Geely Study Java Lesson
Geely Study Pre Lesson3 Process finished with exit code 0

课程类:

同上

课程接口:

同上

上一篇:深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP


下一篇:poj 2891 扩展欧几里得迭代解同余方程组