软件设计七大原则之二----依赖倒置原则

本文深入探讨了依赖倒置原则,解释了其定义与优点,包括减少类间耦合、提高系统稳定性等,并通过编程实例展示了如何从针对实现编程转变为针对抽象编程,以增强代码的扩展性和遵循开闭原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖倒置原则

  • 定义:高层模块不应该依赖低层模块,他们都应该依赖其抽象,
  • 抽象不应依赖细节,而细节应该依赖抽象,
  • 针对抽象编程,而不应该对实现编程。

## 优点:

  1. 减少类与类之间的耦合性;
  2. 提高系统的稳定性;
  3. 增加可读性和可维护性;
  4. 降低修改程序所造成的风险。

Coding 来一个例子吧!!!!

版本1

1. 创建一个ICourse类

 package com.maomao.design.principle.dependenceinversion;
     public interface ICourse {
            
                    void studyCourse();
                
                }

2.创建一个Maomao类(底层模块)

 package com.maomao.design.principle.dependenceinversion;
 public class Maomao {
 		public void studyJavaClass(){
				System.out.println("我在学习Java课程");
			}
		public void studyPythonClass(){
				System.out.println("我在学习Python课程");
			}
	}

3. 写一个测试类(高层模块)
 package com.maomao.design.principle.dependenceinversion;
        		public static void main(String[] args) {
        				Maomao maomao = new Maomao();
        				//maomao学习Java课程
        				maomao.studyJavaClass();
        				// maomao学习Python课程
        				maomao.studyPythonClass();
        		}
        }

这样写如果Maomao要学习其它的课程,再增加其它学习课程的方法就是针对实现编程,这样扩展性不好,而且要经常修改代码。那么就要修改Maomao这个类的代码,这违反了开闭原则,所以,要不断演进代码

版本2

 1. 创建一个抽象类ICourse
        package com.maomao.design.principle.dependenceinversion;
  		
  		public interface ICourse {
    
        void studyCourse();
   		
   		 }
   		2.分别创建JavaCourse,PythonCourse,PECourse 实现(implements) ICourse
   			package com.maomao.design.principle.dependenceinversion;

			public class JavaCourse implements ICourse {

    		@Override
    		public void studyCourse() {
        System.out.println("我在学习Java课程");
    }
}
package com.maomao.design.principle.dependenceinversion;

public class PythonClass implements ICourse{

  @Override
    public void studyCourse() {

        System.out.println("我在学习Python课程");
    }
}

package com.maomao.design.principle.dependenceinversion;

public class FECourse implements ICourse {
    @Override
    public void studyCourse() {

        System.out.println("我的学习前端课程");

    }
}

那么Maomao这个类可以这样写

package com.maomao.design.principle.dependenceinversion;

public class Maomao {

    public void studyCourse(ICourse iCourse){

        iCourse.studyCourse();

    }
}

Test类 :

package com.maomao.design.principle.dependenceinversion;

public class Test {

    public static void main(String[] args) {

        Maomao maomao = new Maomao();
		maomao.studyCourse(new JavaCourse());
		maomao.studyCourse(new PythonClass());
        
    }
}

结果:

我在学习Java课程
我在学习Python课程

版本3

主要是通过Maomao类的构造器的方法将ICourse传入构造器中

package com.maomao.design.principle.dependenceinversion;

public class Maomao {

   private ICourse iCourse;

     Maomao(ICourse iCourse){

         this.iCourse = iCourse;
    }

    public void studyCourse(){

        iCourse.studyCourse();

    }
}

Test类内容及结果

package com.maomao.design.principle.dependenceinversion;

public class Test {

    public static void main(String[] args) {

        Maomao maomao = new Maomao(new JavaCourse());

        maomao.studyCourse();

        Maomao maomao1 = new Maomao(new PythonClass());

        maomao1.studyCourse();
		 }
		 }

这个版本也不是最好的,我们一般都希望Maomao是个单例,以保证案例,所以,第四版本,将Maomao这个类暴露它的set方法

版本4

package com.geely.design.principle.dependenceinversion;
public class Geely {

    public void setiCourse(ICourse iCourse) {
        this.iCourse = iCourse;
    }

    private ICourse iCourse;
	 public void studyImoocCourse(){
        iCourse.studyCourse();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值