设计模式六大原则之依赖倒置原则讲解
最近学习设计模式六大原则,简单记录一下学习内容,方便以后复习查阅,如有理解的不对请评论指正。设计模式可以简单理解为面向对象语言开发过程中,遇到各种场景和问题,解决方案和思路。设计模式六大原则为:单一职责原则、里氏替换原则、迪米特法则、依赖倒置原则、接口隔离原则、开闭原则。
依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构中,高层模块不能依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并能够降低修改程序所造成的风险。
实例代码
新建一个抽象类,定义一个手机的通用功能。
public abstract class AbstractPhone { public int Id { get; set; } public string Branch { get; set; } public abstract void Call(); public abstract void Text(); }
定义一个苹果手机类,并继承自抽象类:
public class iPhone : AbstractPhone { public override void Call() { Console.WriteLine($"User {this.GetType().Name} Call"); } public override void Text() { Console.WriteLine($"User {this.GetType().Name} Text"); } }
定义一个华为手机类,并继承自抽象类:
public class Huawei : AbstractPhone { public override void Call() { Console.WriteLine($"User {this.GetType().Name} Call"); } public override void Text() { Console.WriteLine($"User {this.GetType().Name} Text"); } }
在定义一个学生类,方法参数使用抽象类调用其方法。
public class Student { public int Id { get; set; } public string Name { get; set; } /// <summary> /// 依赖抽象 /// </summary> /// <param name="phone"></param> public void Play(AbstractPhone phone) { Console.WriteLine($"这里是{this.Name}"); phone.Call(); phone.Text(); } }
通过上图代码可以看出学生类与手机类之间是通过抽象进行依赖的。
调用代码如下:
Student student = new Student() { Id = 1, Name = "测试学生" }; AbstractPhone iPhone = new iPhone(); student.Play(iPhone); AbstractPhone huawei = new Huawei(); student.Play(huawei);
运行结果如下:
猜您可能还喜欢
评论列表
发表评论
文章分类
文章归档
- 2025年3月 (1)
- 2024年6月 (2)
- 2024年5月 (2)
- 2024年4月 (4)
- 2024年3月 (30)
- 2024年1月 (4)
- 2023年12月 (2)
- 2023年11月 (4)
- 2023年10月 (4)
- 2023年9月 (6)
- 2023年3月 (2)
- 2023年2月 (1)
- 2023年1月 (1)
- 2022年12月 (1)
- 2022年9月 (21)
- 2022年8月 (10)
- 2022年7月 (3)
- 2022年4月 (1)
- 2022年3月 (13)
- 2021年8月 (1)
- 2021年3月 (1)
- 2020年12月 (42)
- 2020年11月 (7)
- 2020年10月 (5)
- 2020年8月 (1)
- 2020年6月 (1)
- 2020年3月 (2)
- 2019年12月 (8)
- 2019年11月 (3)
- 2019年9月 (1)
- 2019年4月 (1)
- 2019年3月 (6)
- 2019年2月 (1)
- 2018年7月 (7)
阅读排行
- 1.asp.net mvc内微信pc端、H5、JsApi支付方式总结(5703)
- 2.各大搜索网站网站收录提交入口地址(3202)
- 3.Windows 10休眠文件更改存储位置(3167)
- 4.ECharts仪表盘实例及参数使用详解(3096)
- 5.windows 10安装myeclipse 10破解补丁cracker.jar、run.bat闪退解决办法(2995)
- 6.HTML5 WebSocket与C#建立Socket连接实现代码(2867)
- 7.华为鸿蒙系统清除微信浏览器缓存方法(2793)
- 8.CERT_HAS_EXPIRED错误如何解决(2260)
- 9.Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2192)
- 10.HBuilder编辑器格式化代码(2120)