面向对象的六大原则

 原文:http://blog.csdn.net/yqlee2000/article/details/50843888

1、单一职责

单一职责的英文全称是Single Responsibility Principle,缩写为SRP。

定义:就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数,数据的封装。两个完全不一样的功能就不应该放在一个类中。

单一职责是代码优化的第一步!

2、开闭原则

开闭原则的英文全称是Open Close Principle 缩写是OCP,它是Java世界里最基础的设计原则,它指导我们如何建立一个稳定、灵活的系统。

定义:软件中的对象(类、模块、函数)应该对于扩展是开放的,但是,对于修改是封闭。

在现实开发中,只通过继承的方式来升级、维护原有系统只是一个理想化的愿景,因此,在实际开发的过程中,修改原代码、扩展代码往往同时存在。

程序一旦开发完成,程序中一个类的实现只应该因错误而被修改,新的或者改变的特性应该通过新建不同的类实现,新建的类可以继承的方式重用原类的代码。

3、里氏替换原则

里氏替换原则英文全称是Liskov Subsitution Principle,缩写是LSP。

定义:所有引用基类的地方必须能透明地使用其子类的对象。

面向对象语音的三大特点是继承、封装、多态,里氏替换原则是依赖于继承、多态这两大特性。

里氏替换原则简单来说就是,所有引用基类的地方必须能透明地使用其子类的对象。通俗点讲,只要父类出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或者异常,使用者可能根本就不需要知道是父类还是子类。反过来就不行了,有子类出现的地方,父类未必就能适应。

里氏替换原则的核心就是抽象,抽象又依赖于继承这个特性。

继承的优点:

1)、代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性;

2)、子类与父类基本相似,但又与父类有所区别;

3)、提高代码的可扩展性。

继承的缺点:

1)、继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;

2)、可能造成子类代码冗余、灵活性降低,因为子类必须拥有父类的属性和方法。

里氏替换原则提供了指导原则,也就是建立抽象,通过抽象建立规范,具体的实现在运行时替换掉抽象,保证系统的扩展性、灵活性。

4、依赖倒置原则

依赖倒置原则英文全称是Dependence Inversion Principle,缩写为DIP。依赖倒置原则指代了一种特定的解耦形式,使得高层次的模块不依赖底层次的模块的实现细节的目的,依赖模块被颠倒了。

几个关键点:

1)、高层模块不应该依赖底层模块,两者都应该依赖其抽象;

2)、抽象不应该依赖细节;

3)、细节应该依赖抽象。细节就是实现类。

高层模块就是调用端,底层模块就是具体实现类。

依赖倒置原则在Java语音中的表现就是:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。

5、接口隔离原则

接口隔离原则英文全称是InterfaceSegregation Principle,缩写是ISP。ISP的定义是:客户端不应该依赖它不需要的接口。另一种定义是:类间的依赖关系应该建立在最小的接口上。接口隔离原则将非常庞大、臃肿的接口拆分成更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。

接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。

6、迪米特原则

迪米特原则英文全称是Law of Demeter,缩写为LOD,也称为最少知识原则(Least Knowledge Principle)。

定义:一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现与调用者或者依赖这没关系,调用者或者依赖者只需要知道它需要的方法即可,其他的可一概不管。

类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

“只与直接的朋友通信”这简单的几个字就能将我们从复杂的关系网中抽离出来,使耦合度更低、稳定性更好。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值