《OOP设计的6大原则》
来源:互联网 发布:淘宝外卖确认送达失败 编辑:程序博客网 时间:2024/05/29 10:07
一、OCP原则(开闭原则)—— Open Close Principle
实体类、模块和方法应该对扩展开放,对修改关闭,尽量面向接口编程。
public interface ocp{
void open();
void close();
}
二、SRP原则(职责单一原则)—— Single Responsibility Principle
应该有且只有一个原因引起类的变更。
public interface SRP extends OCP{
void onlyDneThing(); //仅有一个
}
打个比方某个计算方法,有算法和打印两个功能。突然有一天,我不想打印,或者需要改变计算方法了,但之前的方法还是要用到算法和打印的功能,导致需要在写一个一个这样的方法。所以,在我们编写方法时,应该做到有且只有一个原因引起类的变更。
三、LSP原则(里氏替换原则)—— Liskov Substitution Principle
所有引用基类的地方必须能透明地使用其他类的对象。
public interface LSP extends OCP{
void liskovSubstitutionPrinciple();
}
通俗点讲:只要父类能出现的地方子类就可以出现,而且替换为子类也不产生任何错误,反之则不然。这主要体现在,我们经常使用抽象类/基类作为方法参数,具体用哪个子类作为参数传入进去,由调用者决定。
这条原则包含以下几个方面:
* 子类必须完成实现父类的方法;
* 子类可以有自己的个性外观(属性)和行为(方法);
* 覆盖或者实现父类方法时,参数可以被放大。即父类的某个方法参数为HashMap时,子类参数可以是HashMap,也可以是Map或者更大;
* 覆盖或者实现父类的方法时,返回结果可以被缩小。即父类的某个方法返回Map,子类可以是Map,也可以是HashMap或者更小。
四、DIP(依赖倒置原则)—— Dependence Inversion Principle
高层模块不要依赖低层模块,所以依赖都应该是抽象的,抽象不应该依赖于具体细节,具体细节应该依赖于抽象
* 低层模块:不可分割的原子逻辑就是低层模块;
* 高层模块:低层模块的组装合成后就是高层模块;
* 抽象:Java中体现为基类,抽象类,接口,而不单指抽象类;
* 细节:体现为子类,实现类。
通俗点讲,该原则包含以下几点要素:
* 模块间的依赖应该通过抽象发生,具体实现类之间不应该建立依赖关系;
* 接口或者抽象类不依赖于实现类,否则就失去了抽象的意义;
* 实现类依赖于接口或者抽象类。
总结起来,一句话: 面向接口编程。
五、ISP原则(接口隔离原则)—— Interface-Segregation Principle
客户端不应该依赖它不需要的接口;类间的依赖应该建立在最小的接口上
通俗点讲:使用接口时应该建立单一接口,不要建立臃肿庞大的接口,尽量给调用者提供专门的接口,而非多功能接口。
例子:
button.setOnClickListener(clickListener);
button.setOnLongClickListener(longClickListener);
根据不同的需求有分别不同的接口,而不是直接一个接口有全部功能,这就是遵循了ISP原则的接口,每个接口最小化了,Activity/button作为调用者,我可以选择性的去处理我想处理的事件,不关心事件监听我就不去处理,依赖。
六、LOD法则(迪米特法则)—— Low of Demeter
又称最少只是原则,一个对象应该对其他对象有最少的了解。
通俗点讲:一个类应该对自己需要耦合或者调用的类知道越少越好,被耦合或者调用的类内部和我没有关系,我不需要的东西你就别public。
迪米特法则包含以下几点要素:
* 只和朋友类交流:只耦合该耦合的类
* 朋友间也是有距离的:减少不该public的方法,向外提供一个简洁的访问
* 自家的方法就自己创建:只要该方法不会增加内部的负担,也不会增加类间的耦合
- 《OOP设计的6大原则》
- OOP 6大设计原则
- 设计模式系列:OOP设计6大原则
- 设计模式系列:OOP设计6大原则
- OOP三大特性及几大设计原则
- OOP几大原则
- OOP几大原则
- OOP 5大原则
- OOP五大原则
- OOP几大原则
- java OOP中常用的设计原则
- java OOP中常用的设计原则
- 面向对象【OOP】的设计原则
- OOP(面向对象编程)设计五大原则
- oop设计原则
- OOP抽象设计原则
- 设计模式OOP原则
- OOP设计原则
- ajax基本原理和使用
- Service的两种创建方式(startService和bindService)的使用
- elasticsearch-prefix 前缀查询优劣
- Win7 Python guiqwt 开发环境搭建
- 基于位置运动学的一些研究(四)
- 《OOP设计的6大原则》
- i386的页式内存管理机制(Linux源代码情景分析读书笔记)
- eclipse配置
- CloudStack4.9 安装文档
- 【zabbix教程六】——自定义item和trigger当内存不足10%时触发报警
- 最新博客地址
- 【Java每日一题】20170227
- java
- No result defined for action xxxAction and result input