Java中面向对象的设计原则

19-05-29 jdon
              

学习面向对象编程(如抽象,  封装,  多态和  继承)的基础知识非常重要  。但是,与此同时,了解面向对象的设计原则,创建清洁和模块化设计同样重要。这些指南有助于设计强大的面向对象的软件设计。

封装变化的内容

  • 如果您知道您的代码将来会发生变化,请将其分开。
  • 这种OOPS设计原则的好处是可以轻松测试和维护适当的封装代码。
  • 只有一件事在软件领域是不变的,那就是“改变”,所以封装你期望或怀疑将来要改变的代码。
  • 如果您使用Java进行编码,则遵循默认情况下将变量和方法设为私有的原则,并逐步增加访问权限,例如从私有到受保护而不是公共。Java中的一些设计模式使用Encapsulation,Factory设计模式是Encapsulation的一个示例,它封装了对象创建代码,并提供了以后引入新产品的灵活性,而不会影响现有代码。

代码到接口而不是实现

  • 始终为接口编程而不是为了实现,这将导致灵活的代码,可以与接口的任何新实现一起工作。
  • 在Java中使用变量的接口类型、方法的返回类型或方法的参数类型。这已经被许多Java程序员所建议,包括Effective Java和Head First设计模式书。

授权原则

  • 不要自己做所有事情,把它委托给各自的类。委托设计原则的经典示例是  Java中的equals()  和  hashCode()方法。
  • 为了比较两个对象是否相等,我们要求类本身进行比较,而不是让客户端类进行检查。这种设计原则的好处是代码不重复,并且很容易修改行为。

开放封闭原则(OCP)

  • 类应该是扩展时开放,修改时关闭。
  • 类、方法或函数应为扩展打开(新功能),并为修改关闭。
  • 这种面向对象设计原则的好处是,它可以防止有人改变已经经过试验和测试的代码。

不要重复自己

  • 通过抽象常见事物并将它们放在一个位置来避免重复代码。
  • 使用抽象类在一个地方抽象公共事物。如果代码块位于两个以上的位置,请考虑将其设置为单独的方法,或者如果多次使用硬编码值,请将其设置为公共静态最终常量。
  • 这种面向对象设计原则的好处在于维护。

单一责任原则(SRP)

  • 我们的Web应用程序中的每个对象都应该承担单一责任,并且所有对象的服务应该专注于承担单一责任(SRP)。
  • 如果在Java中的一个类中放置多个功能,它会引入两个功能之间的耦合,即使您更改了一个功能,也有可能破坏耦合功能,这需要另一轮测试以避免在生产环境中产生任何意外。

利斯科夫的替代原则(LSP)

  • 子类应该适合它们的基类。
  • 根据Liskov替换原则,子类型必须可替代超类型,即使用超类型的方法或函数必须能够与子类的对象一起工作而没有任何问题。
  • LSP与单一责任原则和接口隔离原则密切相关。如果一个类具有比子类更多的功能则可能不支持某些功能并且违反了LSP。

接口隔离原理(ISP)

  • 接口隔离原则规定,如果客户端不使用该接口,则不应实现该接口。
  • 这种情况主要发生在一个接口包含多个功能,而客户端只需要一个功能而不需要其他功能时。接口设计是一项棘手的工作,因为一旦释放接口,就无法在不破坏所有实现的情况下更改接口。
  • Java中这种设计原则的另一个好处是,接口的缺点是在任何类都可以使用之前实现所有方法,因此具有单一功能意味着更少的实现方法。

依赖注入或反演原则

  • 不要要求依赖,它将由框架提供给您。这在Spring框架中得到了很好的实现,这个设计原则的优点在于任何由DI框架注入的类都易于使用模拟对象进行测试并且更易于维护,因为对象创建代码集中在框架中而客户端代码中则没有。
  • 实现依赖注入的方法有多种,比如使用字节码插入,这是一些AOP(面向方面编程)框架(如AspectJ)所做的,或者使用代理(如Spring中使用的代理)。请参阅IOC和DI设计模式的示例,以进一步了解这个可靠的设计原则。