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

课程类:

同上

课程接口:

同上

设计模式课程 设计模式精讲 3-4 依赖倒置原则讲解+coding的更多相关文章

  1. 设计模式课程 设计模式精讲 3-8 迪米法特原则讲解及Coding

    1 课程讲解 1.1 定义 1.2 特质 1.3 重点 2 代码演练 2.1 反例 2.2 正例 1 课程讲解 1.1 定义 定义:一个对象应该对其他对象保持最少的了解.又叫最少知道原则. 1.2 特 ...

  2. 北风设计模式课程---依赖倒置原则(Dependency Inversion Principle)

    北风设计模式课程---依赖倒置原则(Dependency Inversion Principle) 一.总结 一句话总结: 面向对象技术的根基:依赖倒置原则(Dependency Inversion ...

  3. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...

  4. zt 设计模式六大原则(3):依赖倒置原则

    下面说法对不对? 父类将算法(逻辑)封装起来,子类实现细节:这个就叫DIP(依赖倒置:Dependency Inversion Principles),模板模式就是这个原则的实现.如果在父类中加一个t ...

  5. 设计模式——依赖倒置原则实例(PHP实现)

    <?php /** * 设计模式--依赖倒置原则实例 * Created by DannyWang * jue.wang@yulore.com * 2015-05-05 */ abstract ...

  6. C++ 设计模式 依赖倒置原则 简单示例

    C++ 设计模式 依赖倒置原则 简单示例 /** * 依赖倒置原则(Dependency Inversion Principle) * 依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程 ...

  7. 《设计模式》-原则三:依赖倒置原则(DIP)

    这几天晚上回来都去玩了!没有坚持学习.真的好惭愧! 非常自责 后面一定要坚持 一气呵成  争取每天学一点,把这个学完. 今天主要是看了一下  设计模式中的 原则三: 依赖倒置原则(DIP) 官方是这样 ...

  8. Java设计模式(2:单一职责原则和依赖倒置原则详解)

    一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...

  9. 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)

      定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...

随机推荐

  1. Lenet 神经网络-实现篇(2)

    Lenet 神经网络在 Mnist 数据集上的实现,主要分为三个部分:前向传播过程(mnist_lenet5_forward.py).反向传播过程(mnist_lenet5_backword.py). ...

  2. 线段树 区间查询区间修改 poj 3468

    #include<cstdio> #include<iostream> #include<algorithm> #include<string.h> u ...

  3. go key-value缓存go-cache实现

    Cache类型 Cache封装了一个cache类型,cache类型的参数解析: 1.defaultExpiration time.Duration 每个键值的默认过期时间. 2.items map[s ...

  4. 046_使用Scanner获得键盘输入 047_控制语句介绍 048_控制语句_if单选择结构 049_ifelse双选择结构 050_ifelseifelse多选择结构

    046_使用Scanner获得键盘输入 package test_package;import java.util.Scanner;/** * 测试获得键盘输入 * @author * */publi ...

  5. mybatis重新回顾

    此次在项目中相遇了mybatis,重新回顾下. 1.resulMap解决了结果集的列名字跟实体setter和getter不匹配的问题 其中property是实体的setter和getter对象,col ...

  6. 511,display:inline-block什么时候不会显示间隙?

    (百科: 在CSS布局中,如果我们想要将一些元素在同一行显示,其中的一种方法就是把要同行显示的元素设置display属性为inline-block,但是你会发现这些同行显示的inline-block元 ...

  7. 【做题笔记】P6014 [CSGRound3]斗牛

    仔细读题:另外两张牌和的个位数即为你所获得的点数.对于Subtask 1,枚举即可.50 分. 考虑:取 \(n-2\) 张牌和取答案的 \(2\) 张牌本质是一样的.因为若取符合条件的 \(n-2\ ...

  8. OracleDBConsoleorcl 服务无法启动:Agent process exited abnormally during initialization.

    OracleDBConsoleorcl 服务无法启动 在事件查看器里看到 Agent process exited abnormally during initialization.的记录.知道是因为 ...

  9. Springboot 中AOP的使用

    面向切面编程(Aspect Oriented Programming) 是软件编程思想发展到一定阶段的产物,是面向对象编程的有益补充.AOP一般适用于具有横切逻辑的场合,如访问控制.事务管理.性能检测 ...

  10. 安慰奶牛Cheering up the Cow

    传送门 一次a就很开心 可以当作kruskal模板题(orz --------------------------------------------------------------------- ...