近日看了一下面向对象的六大原则,这里简单总结一下,关于具体的内容网上相关内容很多了
第一:单一职责原则(Single Responsibility Principle,简称SRP),SRP的基本定义就是:“就一个类而言,应该仅有一个引起它变化的原因。”。简单说就是一个类里面应该是一组关联性很高的方法,数据。所谓单一职责原则,就是要突出“单一”二字。不过由于一个函数的类,的功能怎么区分,是人为的主观判断的问题,所以更多的时候要靠经验来判断,但是基本原则都是,两个完全不一样的功能不可以放在一个类里面,一个类里面的内容应该是相关性很高的。
第二:开闭原则(Open Close Principle,简称OCP),所谓的开闭原则,定义是软件中的对象(类、模块、函数),应该保证对扩展是开放的,而对修改是封闭的。当软件功能需要升级或修改的时候,应该尽量的是通过扩展的功能来实现需求的变化,而不是通过修改原本已经经过测试的旧代码来实现,因为随意的修改可能会导致为安全的经过测试的旧代码带来不可预估的错误。不过这种通过扩展来实现需求的方法只是理想中的情况,实际开发中基本不可能只通过扩展就可以完成对需求的实现,不过为了程序的安全,健壮,应该尽可能的避免修改原本的代码。
第三:里氏替换原则(Liskov Substitution Principle,简称LSP),基本定义为:所有引用基类的地方必须能透明的适用其子类的对象。里氏替换原则依赖于面向对象三大特点中的继承与多态。说白了就是,只要是父类能出现的地方,那么替换为其子类也不会产生任何错误或者异常,使用者甚至不需要知道这里究竟是父类还是子类。但是反过来就不可以了,有子类出线的地方,父类却未必能够适配。就是面向对象设计中的“抽象”概念。
第四:依赖倒置原则(Dependence Inversion Principle,简称DIP),DIP的关键点有以下几点,1)高层模块不应该依赖底层模块,两者都应该依赖其对象。2)抽象不应该依赖细节。3)细节应该依赖抽象。这里只说在Java语言中,抽象指的是抽象类和接口,两者都是不能被实例化的;而细节则是指的具体的实现类,实现接口或者继承抽象的类。是可以被直接实例化的对象。也就是一个类中不应该依赖到具体细节,因为这样如果功能需求变更了,那么就需要修改被依赖的细节,而依赖的也要被修改,这样就又不符合开闭原则了,所以应该是依赖抽象,方便扩展。(这里比较难理解一点,可以找寻具体的代码来细读。)
第五:接口隔离原则(Interface Segregation Principle,简称ISP),简单定位就是,客户端不应该依赖它所不需要的接口。就是我们应该把具体功能接口拆分成更细的,更具体的接口,保证客户端依赖的都是他需要的接口,接口隔离原则的目的是系统的解耦,从而更容易对代码进行重构,更改和重新部署。
第六:迪米特原则(Law of Demeter,简称LOD,也被称为最少知识原则,Least Knowledge Principle),基本原则就是,一个对象应该对其他对象拥有最少的了解。同岁来说就是一个类,应该对自己需要耦合或者调用的类知道的尽可能的少。不去关注类的具体实现,只需要关注其的调用。用这样的方式来降低耦合度。
以上就是六大原则的基本介绍,当然具体开发的时候,不可能做到这么面面俱到,但是我们必须朝着这个方向努力,尽可能的最大程度的遵循面向对象六大原则。慢慢地让软件更加的灵活以及便于维护。
本文主要参考《Android源码设计模式》一书,接下来会学习一些基本的设计模式来分享。