之前一直认为程序中的类有使用到封装,继承,多态就是面向对象设计,其实否则 封装,继承,多态只是面向对象的三大特性,可是在设计程序的时候并非说类的结构使用到了(或是体现出了)这三个特性就是面向对象,其实真正的面向对象设计是要符合下面的五大原则,编程
面向对象的五大基本原则
单一职责原则(SRP)
开放封闭原则(OCP)
里氏替换原则(LSP)
依赖倒置原则(DIP)
接口隔离原则(ISP)spa
单一职责原则(SRP)
一个类应该仅有一个引发它变化的缘由 (最简单,最容易理解却最不容易作到的一个设计原则)
例子:
好比在职员类里,将工程师、销售人员、销售经理这些状况都放在职员类里考虑,其结果将会很是混乱,在这个假设下,职员类里的每一个方法都要if else判断是哪一种状况,从类结构上来讲将会十分臃肿,而且上述三种的职员类型,不论哪种发生需求变化,都会改变职员类!这个是你们所不肯意看到的设计
开放封闭原则(OCP)
既开放又封闭,对扩展是开放的,对更改是封闭的!
扩展即扩展示行的模块,当咱们软件的实际应用发生改变时,出现新的需求,就须要咱们对模块进行扩展,使其可以知足新的需求,
更改封闭便是在咱们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或从新编译文件!
这个原则对咱们在设计类的时候颇有帮助,坚持这个原则就必须尽可能考虑接口封装,抽象机制和多态技术!对象
里氏替换原则(LSP)
子类能够替换父类而且出如今父类可以出现的任何地方
这个原则也是在贯彻GOF倡导的面向接口编程!
在这个原则中父类应尽量使用接口或者抽象类来实现!
子类经过实现了父类接口,可以替父类的使用地方!
经过这个原则,咱们客户端在使用父类接口的时候,经过子类实现!意思就是说咱们依赖父类接口,在客户端声明一个父类接口,经过其子类来实现
这个时候就要求子类必须可以替换父类所出现的任何地方,这样作的好处就是,在根据新要求扩展父类接口的新子类的时候而不影响当前客户端的使用!
继承
依赖倒置原则(DIP)
传统的结构化编程中,最上层的模块一般都要依赖下面的子模块来实现,也称为高层依赖低层!
因此DIP原则就是要逆转这种依赖关系,让高层模块不要依赖低层模块,因此称之为依赖倒置原则!接口
接口隔离原则 ( ISP )
这个原则的意思是:使用多个专门的接口比使用单个接口要好的多!
这个我有体会,在我实际编程中,为了减小接口的定义,将许多相似的方法都放在一个接口中,最后发现,维护和实现接口的时候花了太多精力,而接口所定义的操做至关于对客户端的一种承诺,这种承诺固然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!编译