一切福田,不離方寸,從心而覓,感無不通。

面向对象的五个基本原则

一、单一职责原则(Single-Responsibility Principle):就一个类而言,应该仅有一个引起它变化的原因。
例如:写一个WinForm应用程序,需要将数据库的操作、文件的操作、算法的运用等,不需要将这些都写在Form这样的类中。应该将它们各自分开,应对将来的变化。或许你在写另外一个From类的时候,也需要用到文件操作,那样你就可以复用文件操作的类了,不用粘贴复制代码了。

二、开放封闭原则(Open-Closed Principle):是说软件实体(类、模块、函数等等)应该可以扩展的,但是不可修改。
例如:一个公司成立之初,只有技术部员工。针对这部分我们代码只需要写一个员工类就行。随着公司的成长,公司又成立了销售部,这时代码就需要对员工类进行抽象了,因为技术部和销售部员工的职能各不同了。分成技术类和销售类。随着公司的扩张。又成立了客服部。这时候我们代码就不需要对技术类和销售类修改(封闭),只是添加客服类就OK了(开放)。

三、依赖倒置原则(Dependency-Inversion Principle):抽象不应该依赖细节,细节应该依赖于抽象。
例如:客户端对数据库的插入操作。最初只是将数据保存到MySql数据库,现在需要保存数据到Oracle数据库。我们应该对插入操作进行抽象,MySql和Oracle实现插入操作的具体内容,使客户端依赖与插入操作,而不应该依赖与MySql数据库的操作或Oracle数据库操作。如下图示:

四、里氏替换原则(Liskov-Substituent Principe.):子类必须能够替换掉它们的父类。其意思:子类必须具有父类的所有特性。
例如:写一动物类有奔跑一个方法。狼类和羊类继承动物类,它们都具有奔跑方法。如果此时在动物类中添加食肉这一方法,如果羊类不具有此方法,羊类就不能替换掉动物类。羊类就不能继承动物类。

五、接口隔离原则(Interface-Segregation Principle):多个专用接口优于一个单一的通用接口。其意思:不要将所有的方法都添加到一个接口中。
例如:还是列举狼类和羊类,它们都具有奔跑的方法,但狼具有食肉这一方法,而羊类不具有食肉这一方法。这时可以定义两个接口,让狼类继承奔跑接口和食肉接口即可,而羊类继承奔跑接口即可。

我们在设计类的时候,以上几个原则,尽量遵循有助于软件趋于合理。

 

from:https://blog.csdn.net/happymatilian/article/details/48440073