设计模式学习笔记——设计模式的六大原则

设计模式的六大原则

1.单一职责原则

单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因。
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受意想不到的破坏。
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。
判读:如果能够想到多一个的动机去改变一个类,那么这个类就具有多于一个的职责。
个人理解:Web开发中的domain模型,只拥有public的set方法,没有其他公有的方法修改该对象。

2.开放-封闭原则

开闭原则,是说软件实体(类,模块,函数等等)应该可以扩展,但是不可以修改。即对于扩展是开放的,对于更改是封闭的。
软件设计需要面对需求的改变可以保持相对稳定,系统可以在第一个版本上进行不同版本的升级。
无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。猜测可能变化的种类,构造抽象来隔离变化。
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。( 设计模式学习笔记——简单工厂模式,可以新增某种计算方法,通过继承抽象类 Operation 
开闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的可维护、可扩展、可复用、灵活性好。 对频繁变化的部分进行抽象。

3.里氏代换原则

里氏替换原则:子类型必须能够替换掉它们的父类型。
一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父对象和子对象的区别。即:父类替换成它的子类,程序的行为没有变化。
不是所有的父类都可以替换成它的子类,类的继承的前提是,子类继承父类所有的非private的行为和属性,如果父类拥有某种私有的行为的时候,而子类又没有该行为,此时父类出现的地方不能使用子类替换。
只有当子类可以替换掉父类,软件单位的功能不受到影响,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
由于子类的可替换性,使得父类类型的模块在无需修改的情况下就可以扩展。

4.依赖倒转原则

依赖倒转原则,抽象不应该依赖细节,细节应该依赖于抽象。即针对接口编程,不要对实现编程。
高层模块不应该依赖底层模块。两个都应该依赖抽象。

如实际项目开发经常访问数据库,可以把访问数据库代码写成函数,每次使用就可以直接调用函数,这就是高层模块依赖低层模块。当更改其他数据库时,高层模块就不能复用了。
依赖倒转是面向对象的标志,编写程序是如何针对抽象编程而不是针对细节编程,依赖关系终止于抽象类或者接口,那么就是面向对象设计,反之,过程化设计。

5.迪米特原则

迪米特原则,也叫最少知识原则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。
迪米特原则的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,它的根本思想是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。
即:一个对象应该对其他对象保持最少的了解,而是可以通过“朋友”进行通信。

6.接口隔离原则

接口隔离原则,使用多个专门的接口,而不使用单个的总接口,即客户端不应该依赖那些它不需要的接口。
每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
单一职责和接口隔离原则的区别:
1.单一职责原则注重的是职责;接口隔离原则注重对接口依赖的隔离。
2.单一职责原则约束类,其次是接口和方法,针对实现和细节;接口隔离原则约束接口,针对抽象。
*注:所有的设计模式都是为了遵守这六大原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值