当前位置: 首页 > news >正文

C#设计模式六大原则之依赖倒置原则

C#设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。以下介绍C#依赖倒置原则。

依赖倒置原则(Dependence Inversion Principle)

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度。

例如,

1)一般的反面设计实现

using System;
namespace ConsoleApplication
{public class HondaCar{public void Run(){Console.WriteLine("本田开始启动");}public void Turn(){Console.WriteLine("本田开始转弯");}public void Stop(){Console.WriteLine("本田开始停车");}}public class FordCar{public void Run(){Console.WriteLine("福特开始启动");}public void Turn(){Console.WriteLine("福特开始转弯");}public void Stop(){Console.WriteLine("福特开始停车");}}public class BmwCar{public void Run(){Console.WriteLine("福特开始启动");}public void Turn(){Console.WriteLine("福特开始转弯");}public void Stop(){Console.WriteLine("福特开始停车");}}public class AutoSystem{public enum CarType{Ford, Honda, Bmw};HondaCar hcar = new HondaCar();FordCar fcar = new FordCar();BmwCar bcar = new BmwCar();private CarType type;public AutoSystem(CarType type){this.type = type;}public void RunCar(){if (type == CarType.Ford){fcar.Run();}else if (type == CarType.Honda){hcar.Run();}else if (type == CarType.Bmw){bcar.Run();}}public void TurnCar(){if (type == CarType.Ford){fcar.Turn();}else if (type == CarType.Honda){hcar.Turn();}else if (type == CarType.Bmw){bcar.Turn();}}public void StopCar(){if (type == CarType.Ford){fcar.Stop();}else if (type == CarType.Honda){hcar.Stop();}else if (type == CarType.Bmw){bcar.Stop();}}}class Program{public static void Main(){AutoSystem autoSystem = new AutoSystem(AutoSystem.CarType.Honda);autoSystem.RunCar();autoSystem.TurnCar();autoSystem.StopCar();Console.ReadKey();}}
}

 

 2)依赖倒置原则的实现

using System;
namespace ConsoleApplication
{public interface ICar{void Run();void Turn();void Stop();}public class BmwCar : ICar{public void Run(){Console.WriteLine("宝马开始启动");}public void Turn(){Console.WriteLine("宝马开始转弯");}public void Stop(){Console.WriteLine("宝马开始停车");}}public class FordCar : ICar{public void Run(){Console.WriteLine("福特开始启动");}public void Turn(){Console.WriteLine("福特开始转弯");}public void Stop(){Console.WriteLine("福特开始停车");}}public class HondaCar : ICar{public void Run(){Console.WriteLine("本田开始启动");}public void Turn(){Console.WriteLine("本田开始转弯");}public void Stop(){Console.WriteLine("本田开始停车");}}public class AutoSystem{private ICar icar;public AutoSystem(ICar icar){this.icar = icar;}public void RunCar(){icar.Run();}public void TurnCar(){icar.Turn();}public void StopCar(){icar.Stop();}}class Program{public static void Main(){AutoSystem autoSystem = new AutoSystem(new HondaCar());autoSystem.RunCar();autoSystem.TurnCar();autoSystem.StopCar();Console.ReadKey();}}
}

 

http://www.lryc.cn/news/192417.html

相关文章:

  • IDEA的使用(二)快捷键 (IntelliJ IDEA 2022.1.3版本)
  • 微信小程序个人账号申请和配置详细教程
  • opencv定位图片中的图案?
  • 高防CDN:网络安全的不可或缺之选
  • flutter 常用组件:文本、图片和按钮
  • BI工具:让数据分析井然有序一望而知
  • 2024级199管理类联考之逻辑核心基础
  • 第二次课,文件校验(预习)
  • 京东官方平台API接口获得JD商品详情页信息数据采集产品价格、原价、销量、商品属性名等
  • 深入篇【C++】总结智能指针的使用与应用意义(auto_ptr/unique_ptr/shared_ptr/weak_ptr)底层原理剖析+模拟实现
  • 计算机视觉和机器视觉有什么区别?
  • 【树莓派 picamera】
  • HarmonyOS应用开发者基础认证【满分答案】
  • CSS 常用样式——定位属性类型及特点
  • 华纳云:Linux文件不存在无法删除如何解决
  • mysql增加字段语句转为Oracle语句
  • VMware搭载linux出现的bugs
  • websocket逆向-protobuf序列化与反序列化
  • 车载电子电器架构 —— 国产基础软件生态简介
  • CNN-generated images are surprisingly easy to spot... for now
  • 蓝桥杯(七段码,C++)
  • Master PDF Editor v5.9.70便携版
  • 【剑指Offer】20.表示数值的字符串
  • 2023年9月Web3行业月度发展报告区块链篇 | 陀螺科技会员专享
  • Unity 快捷键的一些记录
  • GIT指令 - git stash
  • LiveMedia视频中间件视频隐私打码直播解决方案
  • 关于神经网络的思考
  • CodeForces每日好题10.14
  • Python Django 之连接 Mysql 数据库详解