设计模式6大原则简约版
来源:互联网 发布:广告生成器软件下载 编辑:程序博客网 时间:2024/05/08 18:40
单一职责原则(Single Responsibility Principle)
定义
最直白的定义,就是一个类只负责一项职责
问题
可能都会觉得这个没什么的,很容易做到,但就是存在一种叫做职责扩散的问题:A类本来只负责一项职责a,然后有一天a要被细化成两个职责b,c,这个时候大多数人会觉得重新创建类实现b,c比较麻烦,所以就直接在A中做了改动,这就违背了单一职责原则,如果有一天,还要细化职责,还要再加吗,这会是个无底洞!所以编程时,遵守单一职责会让你的代码更加简练,纯洁,不易出问题
好处
1. 降低类的复杂性,利于维护
2. 提高可读性,想想,一个类要是有多个职责,看起来那得多费劲啊
3. 降低变更引起的风险,如果有多个职责,你敢保证修改其中一个不会影响其他的功能?
里氏替换原则(Liskov Substitution Principle)
名字来由
在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的
定义
最直白的话就是,子类可以扩展父类的功能,但不要改变父类原有的功能
原因
对于继承来说的话,父类中已经实现的方法,其实是设定了一系列默认的规范和契约,子类可以不遵从这些规定,但也不能改变它们,如果子类改变父类已经实现的方法,那么就会对达成的契约造成破坏,没有规定可言,无规矩不成方圆,如果你坚持一些不好的编程习惯,那么造成的后果就是,你写的代码出问题的概率会大大上升
依赖倒置原则(Dependence Inversion Principle)
定义
直白来说,就是让我们面向接口编程,要依赖于接口或者抽象类,不要依赖于具体实现类
原因:为什么要依赖抽象的东西,而不依赖具体的东西呢,因为抽象的东西比较稳定,而具体的东西更容易发生变化,如果依赖于具体类,那么我们的系统结构就会极不稳定;而且依赖于抽象类或者接口,也会让程序的耦合性更低,稳定性更高
最好做到
1. 使用继承的时候,遵循里氏替换原则
2. 变量(自己写的类)的声明类型最好是抽象类或者接口,这样的话利于扩展和稳定
3. 我们具体的实现类最好都有继承抽象类或者实现接口
接口隔离原则(Interface Segregation Principle)
定义
实现类不要依赖它不需要的接口,也就是说,一个类对另一个类的依赖要建立在最小的接口上
解决:将接口进行拆分,具体类依赖它所需要的接口,这样减少无用的代码,是你的代码更加清爽
启发
1. 不要建立规模庞大,体系臃肿的接口,接口尽量简化,这样会使实现类更好操作
2. 但也不要造成接口太小,这样会使接口数量过多,使程序设计更加复杂,所以这个要根据业务的复杂性适度定义接口
迪米特法则(Law Of Demeter)
定义
迪米特法则又叫最少知道原则,最早是在1987年由美国Northeastern University的IanHolland提出。最直白来说,就是要保持类与类之间最低的耦合性
问题
可以保持低耦合性,但是要通信,就必须要通过类似中介来发生联系。如果过度使用迪米特法则,就会产生大量的中介类,也会导致系统的复杂性变高,所以使用此原则时,要反复权衡,既做到结构清晰,又要做到高内聚低耦合
开闭原则(Open Close Principle)
定义
一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。这是面向对象设计中最基础的原则
解决
当软件需要变化的时候,尽量通过扩展软件来实现变化,不要改变已有的代码来实现
理解
1. 开闭原则就是:用抽象构建框架,用实现扩展细节
2. 引用别人的话,很经典:“
前面说的5项原则,恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。
最后说明一下如何去遵守这六个原则。对这六个原则的遵守并不是是和否的问题,而是多和少的问题,也就是说,我们一般不会说有没有遵守,而是说遵守程度的多少。任何事都是过犹不及,设计模式的六个设计原则也是一样,制定这六个原则的目的并不是要我们刻板的遵守他们,而需要根据实际情况灵活运用。对他们的遵守程度只要在一个合理的范围内,就算是良好的设计。”
- 设计模式6大原则简约版
- 设计模式6大原则
- 6大设计模式原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式--6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式6大原则
- 设计模式---6大原则
- 设计模式6大原则
- leetcode_c++: String to Integer (atoi):(008)
- ffmpeg cross-compile
- Emoji表情处理
- 《Java源码分析》:Exchanger
- UICollectionView的基本使用
- 设计模式6大原则简约版
- ssh 中文乱码
- [又值奥运季] 2016年里约奥运会所有比赛项目及赛程
- Effective C++ Item 06-若不想编译器自动生成的函数,就该明确拒绝
- Mysql新建用户和数据库并授权
- Android平台webkit组件分析
- qt模仿qq截图
- win主机用web.config和httpd.ini实现301重定向
- IOS开发之保存图片到Documents目录及PNG,JPEG格式相互转换