1、定义:
2、优点:
1、示例1:
(1)、定义一个人员为张三学习课程的类
package com.rf.rules.dependenceinversion;
/**
* @description: 张三人员类
* @author: xiaozhi
* @create: 2020-05-02 21:13
*/
public class Zhangsan {
public void studyJavaCourse(){
System.out.println("张三学习java课程");
}
public void studyPythonCourse(){
System.out.println("张三学习python课程");
}
public void studyVueCourse(){
System.out.println("张三学习vue课程");
}
}
(2)、定义一个测试类
package com.rf.rules.dependenceinversion;
/**
* @description: 测试类
* @author: xiaozhi
* @create: 2020-05-02 21:14
*/
public class Test {
public static void main(String[] args) {
Zhangsan zs=new Zhangsan();
zs.studyJavaCourse();
zs.studyPythonCourse();
zs.studyVueCourse();
}
}
(1)、定义一个学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @Description: 学习课程的接口类
* @Param:
* @Author: xz
* @return:
* @Date: 2020/5/2 21:30
*/
public interface ICourse {
//学习课程方法
void studyCourse();
}
(2)、定义一个学习java课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习java课程类
* @author: xiaozhi
* @create: 2020-05-02 21:31
*/
public class JavaCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习java课程");
}
}
(3)、定义一个学习python课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习python课程类
* @author: xiaozhi
* @create: 2020-05-02 21:32
*/
public class PythonCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习python课程");
}
}
(4)、定义一个学习vue课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习vue课程类
* @author: xiaozhi
* @create: 2020-05-02 21:32
*/
public class VueCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习vue课程");
}
}
(5)、定义一个人员为张三学习课程的类
package com.rf.rules.dependenceinversion;
/**
* @description: 张三人员类
* @author: xiaozhi
* @create: 2020-05-02 21:13
*/
public class Zhangsan {
public void StudyBaiduCourse(ICourse iCourse){
iCourse.studyCourse();
}
}
(6)、定义一个测试类
package com.rf.rules.dependenceinversion;
/**
* @description: 测试类
* @author: xiaozhi
* @create: 2020-05-02 21:14
*/
public class Test {
public static void main(String[] args) {
Zhangsan zs=new Zhangsan();
zs.StudyBaiduCourse(new JavaCourse());
zs.StudyBaiduCourse(new PythonCourse());
zs.StudyBaiduCourse(new VueCourse());
}
}
(1)、定义一个学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @Description: 学习课程的接口类
* @Param:
* @Author: xz
* @return:
* @Date: 2020/5/2 21:30
*/
public interface ICourse {
//学习课程方法
void studyCourse();
}
(2)、定义一个学习java课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习java课程类
* @author: xiaozhi
* @create: 2020-05-02 21:31
*/
public class JavaCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习java课程");
}
}
(3)、定义一个学习python课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习python课程类
* @author: xiaozhi
* @create: 2020-05-02 21:32
*/
public class PythonCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习python课程");
}
}
(4)、定义一个学习vue课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习vue课程类
* @author: xiaozhi
* @create: 2020-05-02 21:32
*/
public class VueCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习vue课程");
}
}
(5)、定义一个人员为张三学习课程的类
package com.rf.rules.dependenceinversion;
/**
* @description: 张三人员类
* @author: xiaozhi
* @create: 2020-05-02 21:13
*/
public class Zhangsan {
private ICourse iCourse;
//通过构造器的方式
public Zhangsan(ICourse iCourse){
this.iCourse=iCourse;
}
//方法不需要指定参数
public void StudyBaiduCourse(){
iCourse.studyCourse();
}
}
(6)、定义一个测试类
package com.rf.rules.dependenceinversion;
/**
* @description: 测试类
* @author: xiaozhi
* @create: 2020-05-02 21:14
*/
public class Test {
public static void main(String[] args) {
Zhangsan zs=new Zhangsan(new JavaCourse());
Zhangsan zs1=new Zhangsan(new PythonCourse());
Zhangsan zs2=new Zhangsan(new VueCourse());
zs.StudyBaiduCourse();
zs1.StudyBaiduCourse();
zs2.StudyBaiduCourse();
}
}
(1)、定义一个学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @Description: 学习课程的接口类
* @Param:
* @Author: xz
* @return:
* @Date: 2020/5/2 21:30
*/
public interface ICourse {
//学习课程方法
void studyCourse();
}
(2)、定义一个学习java课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习java课程类
* @author: xiaozhi
* @create: 2020-05-02 21:31
*/
public class JavaCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习java课程");
}
}
(3)、定义一个学习python课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习python课程类
* @author: xiaozhi
* @create: 2020-05-02 21:32
*/
public class PythonCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习python课程");
}
}
(4)、定义一个学习vue课程类,实现学习课程的接口类
package com.rf.rules.dependenceinversion;
/**
* @description: 学习vue课程类
* @author: xiaozhi
* @create: 2020-05-02 21:32
*/
public class VueCourse implements ICourse{
@Override
public void studyCourse() {
System.out.println("张三学习vue课程");
}
}
(5)、定义一个人员为张三学习课程的类
package com.rf.rules.dependenceinversion;
/**
* @description: 张三人员类
* @author: xiaozhi
* @create: 2020-05-02 21:13
*/
public class Zhangsan {
private ICourse iCourse;
//set构造器
public void setiCourse(ICourse iCourse) {
this.iCourse = iCourse;
}
//方法不需要指定参数
public void StudyBaiduCourse(){
iCourse.studyCourse();
}
}
(6)、定义一个测试类
package com.rf.rules.dependenceinversion;
/**
* @description: 测试类
* @author: xiaozhi
* @create: 2020-05-02 21:14
*/
public class Test {
public static void main(String[] args) {
Zhangsan zs=new Zhangsan();
zs.setiCourse(new JavaCourse());
zs.StudyBaiduCourse();
zs.setiCourse(new PythonCourse());
zs.StudyBaiduCourse();
zs.setiCourse(new VueCourse());
zs.StudyBaiduCourse();
}
}
当我们的人员张三类(Zhangsan)增加折学习课程功能的时候,在不改变人员张三类(Zhangsan)类的情况下,通过创建一个课程接口(ICourse)和课程接口的具体实现类(JavaCourse、PythonCourse等),完成人员学习课程的需求扩展。