vlambda博客
学习文章列表

C#设计模式——设计原则

This browser does not support music or audio playback. Please play it in Weixin or another browser.
C#设计模式——设计原则


我希望未来有一天,因为我的代码,让这个世界上的一些人生活的更便利
感觉到一点点幸福或愉悦。不管这些人多还是少。

前言


    面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。

    设计原则是设计模式的基础,但有的设计模式会破坏一些原则,比如状态模式就违背了开闭原则。设计模式也是双刃剑,在使用过程中,没有完美的模式,只有适合的模式。

C#设计模式——设计原则
C#设计模式——设计原则

1:单一职责


    单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则。

    定义:一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因。

C#设计模式——设计原则
C#设计模式——设计原则

2:开闭原则


    开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。

    定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

    开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段

C#设计模式——设计原则
C#设计模式——设计原则

3:里氏代换


    里氏代换原则是实现开闭原则的重要方式之一。在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

    定义:在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。

C#设计模式——设计原则
C#设计模式——设计原则

4:依赖倒转


    依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。

    定义:抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

C#设计模式——设计原则
C#设计模式——设计原则

5:接口隔离


    接口隔离原则每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。

    定义:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

C#设计模式——设计原则
C#设计模式——设计原则

6:合成复用


    合成复用原则要求复用时要尽量使用组合/聚合关系(关联关系),少用继承,组合/聚合可以使系统更加灵活,降低类与类之间的耦合度,在使用继承时,需要严格遵循里氏代换原则。

    定义:尽量使用对象组合,而不是继承来达到复用的目的。

C#设计模式——设计原则
C#设计模式——设计原则

7:迪米特


    迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。只与满足以下要求的对象通讯。

1:当前对象本身

2:以参数形式传入到当前对象方法中的对象

3:当前对象的成员对象

4:如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友

5:当前对象所创建的对象。

    定义:一个软件实体应当尽可能少地与其他实体发生相互作用。

C#设计模式——设计原则







END




感谢阅读


你知道的越多,你不知道的越多

我是EAST

一个靠互联网苟且偷生的程序员

咱们下期见!





扫描二维码关注我吧

庚子年冲冲冲 发起了一个读者讨论 留言区