一、面向对象的编程设计原则分类
1、单一职责原则
2、开闭原则
3、里氏替换原则
4、依赖倒置原则
5、接口隔离原则
6、合成复用原则
7、迪米特法则
二、为什么要学习设计原则?
软件研发是个不断迭代不断变化的过程,当需求发生变化时,软件设计上面是否能够满足需求跟着发生不断的变换,体现了软件设计的可维护性;
软件研发中大到模块,中到类,小到方法,尽量做到单一职责 ,这样上层可以公用复用的几率比较大;
一句话:通过前人通过实践大量的研究论证设计原则贴近真实的模式设计,减少不合理设计和过度设计,更贴近于合理设计架构模式;
1、软件的可维护性
2、软件的可复用性
软件大师Robert.C.martin 认为一个可维护性()较低的软件设计,通常由于一下四个原因造成:
- 过于僵化(Rigidity):设计难于修改
- 过于脆弱(Fragility):设计易于遭受破坏
- 牢固性(Immobility): 复用率低
- 黏度过高(Viscosity):难于做正确的事情
软件大师Peta Coad 认为一个好的系统设计应用具备一下三个特性:
- 可扩展性(Extensibility):
- 灵活性(Flexibility):
- 可插入性(Pluggability):
软件设计原则并不是孤立存在,它们是相互依赖 、相互补充;
三、设计原则
1、单一职责原则 Single Responsibility Principle(SRP)
1.1、单一职责原则分析
- 一个类(或者大到模块、小到方法)承担的职责越多,它被服用可能性就越小,而且如果一个类承担的职责越多,就相当于将这些职责耦合在一起,当一个职责发生变化时,可能会影响到其他职责;
- 类的职责主要包括两个方面:数据职责,行为职责;数据职责通过属性来体现,而行为职责是通过方法来体现;
- 单一职责原则是实现 “高内聚”,“低耦合”的指导方针,在很多代码重构手法中都能找到它的存在,它是最简单但最难运用的原则,需要设计人员发现类中的不同职责并将其分离,发现类中有不同的职责需要设计人员有较强的分析设计能力和重构经验;
2、开闭原则 Open-Close Principle(OCP)
2.1、定义: 一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使用这个模块可以不被修改的前提下被扩展,即实现在不修改源代码的前提下,改变模块的行为;
2.2、开闭原则分析
2.2.1、它是面向对象设计中最重要的设计之一
2.2.2、在开闭原则定义当中,软件实体可以指一个软件模块、或者一个类、或者多个类组成的局部结构;
2.2.3、抽象化是实现开闭原则的关键
2.2.4、开闭原则还可以通过一个更加具体的对 “可变性封装原则”来描述,对可变性封装原则是找到系统的可变因素 并封装起来;
2.2.5、抽象的好处是 :稳定的、可靠的、不容易发生改变的;
3、里氏替换原则 Liskov Substitution Principle(LSP)
3.1、里氏替换原则分析
- 里氏替换原则可以通俗表示为:在软件中能够使用基类对象,那么一定能够使用子类对象。把基类都替换成它的子类,程序将不会出现任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类的话,那么它不一定能够使用基类;
- 里氏替换原则是实现开闭原则的方式之一,由于使用了基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象定义,而在运行时在确定子类对象类型,用子类对象替换父类对象;
4、依赖倒置原则 (待更新 。。。)