六大设计原则

作用:

对于软件来说,可以降低耦合性,提高项目的可扩展性能,对于开发人员来说,具有良好的设计习惯,搭建出茁壮的软件体系

单一职责

一个类只负责一个功能
现在有功能1和功能2,都放在类a里面,现在我们要对功能1经行修改,但是这个修改可能会导致原本可用的功能2不可用
好处:降低类的复杂度,逻辑会更加简单
提高类(代码)可读性,提高系统的可维护性
降低变更风险

里氏替换

派生类可以扩展基类的功能,但是不能改变父类原有的功能,包含以下含义:
子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法,子类可以增加自己特有的方法
(C#抽象:抽象类不可能被实例化,所有的属性和方法必须是共有的,这些属性和方法可以是非抽象的,具体子类可以被实例化,这个子类如果继承抽象类的抽象属性和方法,子类需要override这些属性和方法,如果没有override父类的所有的抽象属性和方法,子类就要声明为abstract)

依赖倒置

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象
妈妈读书,有妈妈类,妈妈类里面有读书的方法
有一个书类
现在妈妈想读报纸
有一个报纸类
但是妈妈类里面只有读书的方法,没有读报纸的方法
,这样的话,妈妈就读不了报纸了
那怎么办呢?
来一个读物接口,IRead,只要带字的都是读物
妈妈类和读物类都要继承这个接口,这样就实现了,
妈妈类和读物类现在没有关系了
高层和底层都依赖抽象
低层模块尽量都有抽象类或者接口,或者两者都有
使用继承的时候遵循里氏替换原则

迪米特原则

定义:一个对象应该对其他对象保持最少的了解。
问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。
解决方案:尽量降低类与类之间的耦合。
白话理解:只与直接的朋友通信。

迪米特法则的做法观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用率才可以提高,其要求的结果就是产生了大量的中转或跳转类,导致的复杂性提高,同时也为维护带来了难度,所以在采用迪米特法则时需要反复权衡,既做到让结构清晰,又做到高内聚低耦合。
但是过度使用迪米特法则,也会造成系统的不同模块之间的通信效率降低,使系统的不同模块之间不容易协调等缺点。同时,因为迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,这些类存在的唯一原因是为了传递类与类之间的相互调用关系,这就毫无疑问的增加了系统的复杂度。解决这个问题的方式是:使用依赖倒转原则(通俗的讲就是要针对接口编程,不要针对具体编程), 这要就可以是调用方和被调用方之间有了一个抽象层,被调用方在遵循抽象层的前提下就可以自由的变化,此时抽象层成了调用方的朋友。

接口隔离

接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用

开闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。
解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。
开闭原则思想:用抽象构建框架,用实现扩展细节。

说到这里,再回想一下前面说的5项原则,恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。
最后说明一下如何去遵守这六个原则。对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守,而是说遵守程度的多少。任何事都是过犹不及,设计模式的六个设计原则也是一样,制定这六个原则的目的并不是要我们刻板的遵守他们,而需要根据实际情况灵活运用。对他们的遵守程度只要在一个合理的范围内,就算是良好的设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值