通俗易懂-六大设计原则


title: 通俗易懂-六大设计原则
tags:

  • 设计模式
    categories:
  • 设计模式

有需求,就会有满足需求的技术诞生,设计模式官方点讲,就是为了代码可重复性.让代码更容易被他人理解,保证代码的可靠性,通俗点讲,为了少写代码而多写代码,为了更好的"偷懒",呢到底是怎么"偷懒"的呢?它有没有什么依据或者原则呢?有,呢就是设计模式的六大设计原则

单一职责原则

单一职责原则是最简单的面向对象设计原则

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

怎么理解呢?就是说一个类不能太"累"了!为啥?因为,一个类它的职责越多,它被复用的可能性就越小,一个类承担的职责多了,就会让这些职责耦合在一起,当其中一个职责变化时,可能会影响到其他的职责.所以要把这些职责进行分离,将不同的职责封装在不同的类中.

换句话说,我们玩游戏,一个q键,既可以放技能,还可以普通攻击,不好吧,一个q键承担了过多的职责,而且,如果q键普通攻击的职责变了,变成了强制自杀,你玩起来是不是很难受.为什么被复用性的可能性就越少呢?就像你设置鼠标宏,想放下技能然后接个普通攻击.你q键的职责只是单一的话,就可以设置q+普通攻击;然而,你q的职责多了,就不可以这样复用了,类就和q键一样.

单一职责原则是实现高内聚、低耦合,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。

开放封闭原则

开闭原则是面向对象的可复用设计最重要的面向对象设计原则

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

什么是软件实体呢? 在开放封闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。

为什么要遵循开放封闭原则,或者开放封闭原则有什么好处呢?任何的项目,随着时间的推移和需求的变化,都会增加代码,我们应该尽量的保证项目设计是稳定的,如果项目是遵循开放封闭原则的话,就可以很方便的修改代码,在扩展时不用修改现有的代码.随着项目越来越大,维护的成本就会越来越高,所以满足开封封闭原则也就会变的越来越重要.

扫描二维码关注公众号,回复: 4657321 查看本文章

换句话说,项目就像我们堆积木一样,随着时间需求,我们的积木越来越高,我们如果按照开放封闭原则,对积木横向纵向扩展是开放的,是可以增加的,对已经完成的积木是封闭不能修改的.呢么我们的积木就可以越来越高,不容易崩溃,如果不遵循开放封闭原则,你在积木里面修修改改,是不是很容易崩溃?

里氏替换原则

定义: 所有引用基类(父类)的地方必须能透明地使用其子类的对象

它是说在代码中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个代码使用的是一个子类对象的话,那么它不一定能够使用基类对象。

很常见的例子:我喜欢动物,那我一定喜欢猫,因为猫是动物的子类;但是我喜欢猫,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。

呢为什么要这样呢?为了实现开闭原则,里氏代换原则是实现开闭原则的重要方式之一,由于使用子类对象的地方,都可以使用父类对象,因此在代码中尽量使用父类来对对象进行定义,而在运行时在确定它子类类型,用子类对象来替换父类对象,也就是我们学习的多态.

换句话说:你两个好朋友在打架,你是二话不说去帮A朋友呢(直接使用"子类猫"来定义),还是直接去帮B朋友(直接使用"子类鼠:来定义),或者先劝架(定义"父类")然后根据具体情况来决定帮谁(具体替换哪个对象)呢?

依赖倒置原则

如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现

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

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

为什么要这样做呢?

在引入抽象层后,系统将具有很好的灵活性,在程序中尽量使用抽象层进行编程,需要使用的具体类写在配置文件中,这样一来,如果系统行为发生变化,只需要对抽象层进行扩展,然后修改配置文件中的指向的具体类,而无须修改原有系统的源代码,在不修改的情况下来扩展系统的功能,满足开闭原则的要求。

合成/聚合复用原则

定义: 尽量使用合成/聚合,尽量不使用类继承.
类的继承越多,耦合性越强,所以能不使用继承就不使用继承.

迪米特法则

定义: 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发者个类.

迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

也就是,你和你朋友开黑,你朋友喊了另一个朋友,你们三个人一起开黑,你不必知道他是谁,就可以完成三人开黑,原本说好决战到天明,可是你突然有事了,当你有事要走的时候,你只需要给你认识的朋友说声,道个歉就行,而不用给你朋友的朋友道歉,这就降低了你和你朋友的朋友的耦合.

结语

这些原则,和设计模式还有项目结合起来理解效果更佳,慢慢体会其中的好处,就能越来越熟练的运用.

猜你喜欢

转载自blog.csdn.net/qq_42815122/article/details/84452103