JAVA程序员应该了解的10个面向对象设计原则

原则1:DRY(Don't repeat yourself)java

即不要写重复的代码,而是用“abstraction”类来抽象公有的东西。若是你须要屡次用到一个硬编码值,那么能够设为公共常量;若是你要在两个以上的地方使用一个代码块,那么能够将它设为一个独立的方法。SOLID设计原则的优势是易于维护,但要注意,不要滥用,duplicate 不是针对代码,而是针对功能。这意味着,即便用公共代码来验证OrderID和SSN,两者也不会是相同的。使用公共代码来实现两个不一样的功能,其实就是近似地把这两个功能永远捆绑到了一块儿,若是OrderID改变了其格式,SSN验证代码也会中断。所以要慎用这种组合,不要随意捆绑相似但不相关的功能。mysql

原则2:封装变化sql

在软件领域中惟一不变的就是“Change”,所以封装你认为或猜想将来将发生变化的代码。OOPS设计模式的优势在于易于测试和维护封装的代码。若是你使用Java编码,能够默认私有化变量和方法,并逐步增长访问权限,好比从private到protected和not public。有几种Java设计模式也使用封装,好比Factory设计模式是封装“对象建立”,其灵活性使得以后引进新代码不会对现有的代码形成影响。编程

原则3:开闭原则设计模式

即对扩展开放,对修改关闭。这是另外一种很是棒的设计原则,能够防止其余人更改已经测试好的代码。理论上,能够在不修改原有的模块的基础上,扩展功能。这也是开闭原则的宗旨。框架

原则4:单一职责原则函数

类被修改的概率很大,所以应该专一于单一的功能。若是你把多个功能放在同一个类中,功能之间就造成了关联,改变其中一个功能,有可能停止另外一个功能,这时就须要新一轮的测试来避免可能出现的问题。测试

原则5:依赖注入或倒置原则编码

这个设计原则的亮点在于任何被DI框架注入的类很容易用mock对象进行测试和维护,由于对象建立代码集中在框架中,客户端代码也不混乱。有不少方式能够实现依赖倒置,好比像AspectJ等的AOP(Aspect Oriented programming)框架使用的字节码技术,或Spring框架使用的代理等。spa

原则6:优先利用组合而非继承

若是可能的话,优先利用组合而不是继承。一些人可能会质疑,但我发现,组合比继承灵活得多。组合容许在运行期间经过设置类的属性来改变类的行为,也能够经过使用接口来组合一个类,它提供了更高的灵活性,并能够随时实现。《Effective Java》也推荐此原则。

原则7:里氏代换原则(LSP)

根据该原则,子类必须可以替换掉它们的基类,也就是说使用基类的方法或函数可以顺利地引用子类对象。LSP原则与单一职责原则和接口分离原则密切相关,若是一个类比子类具有更多功能,颇有可能某些功能会失效,这就违反了LSP原则。为了遵循该设计原则,派生类或子类必须加强功能。

原则8:接口分离原则

采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。设计接口很棘手,由于一旦释放接口,你就没法在不中断执行的状况下改变它。在Java中,该原则的另外一个优点在于,在任何类使用接口以前,接口不利于实现全部的方法,因此单一的功能意味着更少的实现方法。

原则9:针对接口编程,而不是针对实现编程

该原则可使代码更加灵活,以即可以在任何接口实现中使用。所以,在Java中最好使用变量接口类型、方法返回类型、方法参数类型等。《Effective Java》 和《head first design pattern》书中也有提到。

原则10:委托原则

该原则最典型的例子是Java中的equals() 和 hashCode() 方法。为了平等地比较两个对象,咱们用类自己而不是客户端类来作比较。这个设计原则的好处是没有重复的代码,并且很容易对其进行修改。

总之,但愿这些面向对象的设计原则能帮助你写出更灵活更好的代码。理论是第一步,更重要的是须要开发者在实践中去运用和体会。

相关文章
相关标签/搜索