面向对象设计原则详解:依赖倒置原则

本文介绍了依赖倒置原则的概念及其实现方式,并通过一个程序员学习多种编程语言的案例,展示了如何通过接口编程来提高代码的复用性和灵活性。

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

 定义:抽象不应该依赖于细节。细节应该依赖于抽象。程序中所有的依赖关系都应该终止于抽象类和接口。针对接口而非实现编程。任何变量都不应该持有一个指向具体类的指针或引用。任何类都不应该从具体类派生。任何方法都不应该覆写他的任何基类中的已经实现了的方法。
    说通俗一点就是,你抽象了一个类,这个类在这个工程中可以用,如果再做一个工程,移植过来还能用。遵循这一目的是为了代码的复用。不过这一条规则我觉得原则上可以遵守,但是不一定非要遵守。除非你确定目前的工程,在后续的新工程中需要复用。比如说,开发手机的系统,一般情况下后续多个型号都是以第一个开发出的那个系统为基础的。模块移植很多,这种情况下必须考虑依赖倒置原则。但是如果你正在做的工程,你很清楚这个工程,后面的开发不会再用目前的代码了,比如,下一个版本的软件要换另一种语言开发,那就没必要非得遵守这个原则了。
    如何遵守依赖倒置原则呢?
    1、通过构造函数或者方法传递依赖对象;
    2、通过set方法传递依赖对象;
    3、接口声明实现依赖对象。
    结合以上三条,看下面的例子。
    例如,一个程序员开始写代码。
    public class CSharp      {          public void Coding()          {              Console.WriteLine("使用C#开始写代码。");          }      }      public class Programer      {          private string name;            public Programer(string name)          {              this.name = name;          }            public void Coding(CSharp csharp)          {              Console.Write(name);                csharp.Coding();          }      }

调用

  static void Main(string[] args)    {       Programer programer = new Programer("小白");         programer.Coding(new CSharp());         Console.ReadLine();    }

输出:

小白使用C#开始写代码。

可是这样programer只会用C#,这不行的,要多学几门编程语言。c#只是一门编程语言,抽象一下。

    public abstract class ProgramLangvage      {           public abstract void Coding();      }        public class CSharp:ProgramLangvage      {            public override void Coding()          {              Console.WriteLine("使用C#开始写代码。");          }      }        public class Java : ProgramLangvage      {            public override void Coding()          {              Console.WriteLine("使用Java开始写代码。");          }      }        public class Programer      {          private string name;            public Programer(string name)          {              this.name = name;          }            public void Coding(ProgramLangvage programLnagvage)          {              Console.Write(name);                programLnagvage.Coding();          }      }

 调用

     class Program      {          static void Main(string[] args)          {              Programer programer = new Programer("小白");                programer.Coding(new CSharp());                programer.Coding(new Java());                Console.ReadLine();          }      }

 输出:
 小白使用C#开始写代码。
 小白使用Java开始写代码。
 这样Programer和ProgramLangvage结合,就达到了复用的目的,在其他工程中,只需对ProgramLangvage实现不同就可以了,调用programer.Coding的地方基本不用修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值