java面向对象程序设计_Java程序员的10个面向对象设计原则

java面向对象程序设计

面向对象的设计原则是OOPS编程的核心,但是我看到大多数Java程序员都在追求诸如 Singleton模式 , Decorator模式或 Observer模式之类的设计模式,但没有对 面向对象的分析和设计给予足够的重视,也没有遵循这些设计原则。 我经常见过各种经验水平的Java程序员和开发人员,他们要么没有听说过这些 OOPSSOLID设计原理,要么根本不知道 特定设计原理可以提供什么 好处,或者如何在编码中使用这些设计原理。
最重要的是,始终努力实现具有高度凝聚力和松散耦合的解决方案,代码或设计,并且看起来来自Apache和Sun的开源代码是Java设计原理的很好示例,或者在Java编码中应如何使用设计原理。 Java开发工具包遵循几种设计原则,例如BorderFactory类中的 Factory Pattern ,Runtime类中的Singleton模式,如果您对Java代码有更多兴趣,请阅读 Joshua Bloch撰写的 Effective Java ,这是编写Java API的人的宝藏。 在面向对象设计模式上我另一个个人的最爱是Kathy Sierra等人的 Head First Design Pattern和 Head First Oriented Oriented Analysis and Design 。
尽管学习设计原理或模式的最佳方法是在现实世界中了解并理解违反该设计原理的后果,但是本文的主题是为未接触过或处于学习阶段的Java程序员介绍 面向对象的设计原理 。 我个人认为每个设计原则都需要一篇文章来清楚地解释它,我肯定会在这里尝试做,但是现在就让自己准备好在设计原则之乡快速骑自行车吧:)
面向对象的设计原则1 – DRY(请勿重复)
顾名思义, DRY(不要重复自己)意味着不要编写重复的代码,而应使用 抽象技术在一处抽象公共事物。 如果您多次使用硬编码值,请考虑使其成为公共最终常量;如果您在两个以上的位置中包含代码块,请考虑使其成为单独的方法。 这种SOLID设计原则的好处在于维护。 值得注意的是不要滥用它,重复不是用于代码,而是用于功能,这意味着如果您使用通用代码来验证OrderID和SSN,这并不意味着它们相同或将来会保持不变。 通过将通用代码用于两种不同的功能或事物,您可以将它们永久紧密地结合在一起,并且当OrderID更改其格式时,SSN验证代码将中断。 因此,请注意这种耦合,不要将任何使用相似代码但不相关的东西组合在一起。
面向对象的设计原则2 –封装变化
在软件领域只有一件事是不变的,那就是“更改”。因此,封装您期望或怀疑将来会更改的代码。 这种OOPS设计原则的好处在于,它易于测试和维护正确的封装代码。 如果您使用Java进行编码,则遵循以下原则:默认情况下将变量和方法设为私有,并逐步增加访问权限,例如,从私有到受保护,而不是公共。 Java中有几种 设计模式都使用了封装, 工厂设计模式是封装的一个示例,它封装了对象创建代码,并提供了以后引入新产品的灵活性,而不会影响现有代码。
面向对象的设计原则3 –开放封闭原则
类,方法或函数应为扩展打开(新功能),并为修改关闭。 这是另一种漂亮的面向对象的设计原则,可以防止有人更改已经尝试和测试过的代码。 理想情况下,如果仅添加新功能,则不应测试代码,这就是 开放式封闭设计原则的目标。
面向对象的设计原则4 –单一职责原则(SRP)
类更改的原因不应多于一个,或者一类应始终处理单个功能。 如果您 在Java的一个 类中放置了多个功能,则会在两个功能之间引入 耦合 ,即使您更改了一个功能,也有可能破坏了耦合功能,这需要进行另一轮测试,以免对生产环境造成任何意外。
面向对象的设计原则5 –依赖注入或反转原则
不要要求依赖,它将由框架提供给您。 这已经在Spring框架中很好地实现了,该 设计原理的优点在于,DI框架注入的任何类都易于使用模拟对象进行测试,并且易于维护,因为对象创建代码集中在框架中,并且客户端代码不会乱扔垃圾有多种方法可以实现 依赖注入,例如使用某些AOP(面向方面​​的编程)框架(如AspectJ)所使用的字节码工具,或像Spring中所使用的代理一样来实现 依赖注入
面向对象的设计原则6 –优先继承而不是继承
如果可能的话,始终 主张使用组合而不是继承 。 你们中的有些人可能会争论这一点,但我发现Composition比Inheritance灵活得多。 组合允许通过在运行时设置属性并使用接口来构成一个类,从而在运行时更改类的行为,我们使用 多态性 ,该 多态性可以随时替换以更好的实现。 即使是 有效的Java建议也建议使用组合而不是继承。
面向对象的设计原则7 – Liskov替代原则(LSP)
根据Liskov替换原理,子类型必须可以替代父类型,即使用父类类型的方法或函数必须能够与子类的对象一起工作而不会出现任何问题。 LSP与 单一职责原则接口隔离原则密切相关。 如果一个类具有比子类更多的功能,则可能不支持某些功能并且确实违反了LSP。 为了遵循 LSP设计原则 ,派生类或子类必须增强功能而不减少它。
面向对象的设计原则8 –接口隔离原则(ISP)
接口隔离原则规定,如果客户端不使用接口,则不应实现该接口。 这种情况通常发生在一个接口包含多个功能而客户端只需要一个功能而不是其他功能的情况下。接口设计是一项棘手的工作,因为一旦释放接口,就无法在不破坏所有实现的情况下对其进行更改。 Java中这种设计原则的另一个好处是,接口在任何类都可以使用它之前就无法实现所有方法,因此具有单一功能意味着实现的方法更少。
面向对象的设计原则9 –接口编程不实现
始终 为接口而不是为实现编程,这将导致可以与任何新的接口实现一起使用的灵活代码。 因此,在Java中对变量使用接口类型,方法的返回类型或方法的参数类型。 许多Java程序员都建议使用此方法,包括在 Effective Java和 优先设计模式手册中。
面向对象设计原则10 –委托原则
不要自己做所有事情,而是将其委托给各自的班级。 委托设计原理的经典示例是 Java中的equals()和hashCode()方法 。 为了比较两个对象是否相等,我们要求类本身进行比较,而不是由Client类进行比较。 这种设计原则的好处是不会重复代码,并且很容易修改行为。
所有这些 面向对象的设计原理都通过争取高内聚性和低耦合性来帮助您编写灵活,更好的代码。 理论是第一步,但最重要的是 发展能力,以找出何时以及应用这些设计原则,并确定我们是否违反任何设计原则并损害代码的灵活性。 但是,由于这个世界上没有什么是完美的,所以不要总是尝试用 设计模式和设计原理来解决问题,它们主要用于维护周期较长的大型企业项目。
参考: 10个面向对象的设计原则Java程序员应该在 Javarevisited博客上从我们的 JCG合作伙伴 Javin Paul 了解到 。

翻译自: https://www.javacodegeeks.com/2012/08/10-object-oriented-design-principles.html

java面向对象程序设计

你可能感兴趣的:(设计模式,编程语言,java,python,人工智能)