众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。查看Apache和Sun的开放源代码能帮助你发现其他Java设计原则在这些代码中的实际运用。Java Development Kit则遵循以下模式:BorderFactory类中的工厂模式、Runtime类中的单件模式。你可以通过Joshua Bloch的《Effective Java》一书来了解更多信息。我个人偏向的另一种面向对象的设计模式是Kathy Sierra的Head First Design Pattern以及Head First Object Oriented Analysis and Design。
原则1:DRY(Don't repeat yourself)
即不要写重复的代码,而是用“abstraction”类来抽象公有的东西。如果你需要多次用到一个硬编码值,那么可以设为公共常量;如果你要在两个以上的地方使用一个代码块,那么可以将它设为一个独立的方法。SOLID设计原则的优点是易于维护,但要注意,不要滥用,duplicate 不是针对代码,而是针对功能。这意味着,即使用公共代码来验证OrderID和SSN,二者也不会是相同的。使用公共代码来实现两个不同的功能,其实就是近似地把这两个功能永远捆绑到了一起,如果OrderID改变了其格式,SSN验证代码也会中断。因此要慎用这种组合,不要随意捆绑类似但不相关的功能。
原则2:封装变化
在软件领域中唯一不变的就是“Change”,因此封装你认为或猜测未来将发生变化的代码。OOPS设计模式的优点在于易于测试和维护封装的代码。如果你使用Java编码,可以默认私有化变量和方法,并逐步增加访问权限,比如从private到protected和not public。有几种Java设计模式也使用封装,比如Factory设计模式是封装“对象创建”,其灵活性使得之后引进新代码不会对现有的代码造成影响。
原则3:开闭原则
即对扩展开放,对修改关闭。这是另一种非常棒的设计原则,可以防止其他人更改已经测试好的代码。理论上,可以在不修改原有的模块的基础上,扩展功能。这也是开闭原则的宗旨。
原则4:单一职责原则
类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。
原则5:依赖注入或倒置原则
这个设计原则的亮点在于任何被DI框架注入的类很容易用mock对象进行测试和维护,因为对象创建代码集中在框架中,客户端代码也不混乱。有很多方式可以实现依赖倒置,比如像AspectJ等的AOP(Aspect Oriented programming)框架使用的字节码技术,或Spring框架使用的代理等。
原则6:优先利用组合而非继承
如果可能的话,优先利用组合而不是继承。一些人可能会质疑,但我发现,组合比继承灵活得多。组合允许在运行期间通过设置类的属性来改变类的行为,也可以通过使用接口来组合一个类,它提供了更高的灵活性,并可以随时实现。《Effective Java》也推荐此原则。
原则7:里氏代换原则(LSP)
根据该原则,子类必须能够替换掉它们的基类,也就是说使用基类的方法或函数能够顺利地引用子类对象。LSP原则与单一职责原则和接口分离原则密切相关,如果一个类比子类具备更多功能,很有可能某些功能会失效,这就违反了LSP原则。为了遵循该设计原则,派生类或子类必须增强功能。
原则8:接口分离原则
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。设计接口很棘手,因为一旦释放接口,你就无法在不中断执行的情况下改变它。在Java中,该原则的另一个优势在于,在任何类使用接口之前,接口不利于实现所有的方法,所以单一的功能意味着更少的实现方法。
原则9:针对接口编程,而不是针对实现编程
该原则可以使代码更加灵活,以便可以在任何接口实现中使用。因此,在Java中最好使用变量接口类型、方法返回类型、方法参数类型等。《Effective Java》 和《head first design pattern》书中也有提到。
原则10:委托原则
该原则最典型的例子是Java中的equals() 和 hashCode() 方法。为了平等地比较两个对象,我们用类本身而不是客户端类来做比较。这个设计原则的好处是没有重复的代码,而且很容易对其进行修改。
总之,希望这些面向对象的设计原则能帮助你写出更灵活更好的代码。理论是第一步,更重要的是需要开发者在实践中去运用和体会。
分享到:
相关推荐
"Java面向对象设计原则" Java面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心。下面我们将详细介绍七大设计原则。 原则1: DRY(Don't repeat yourself) DRY...
### Java面向对象设计原则 #### 一、面向对象设计原则概览 面向对象设计原则是在软件开发过程中确保代码质量、可维护性和可扩展性的指导方针。遵循这些原则可以帮助开发者写出更加健壮、灵活且易于理解的代码。...
### Java面向对象设计的六大原则 在Java编程中,面向对象设计的原则对于构建高质量、可维护、可扩展的软件系统至关重要。以下将详细介绍面向对象设计的六大原则:单一职责原则(Single Responsibility Principle, ...
总的来说,Java面向对象设计原则中的“优先使用对象组合而非类继承”鼓励我们避免过度使用继承,而是通过组合来构建灵活、解耦的系统。在实际开发中,我们需要根据具体场景和需求,明智地选择和应用这两种机制,以...
面向对象设计是软件开发中的核心思想,它强调以对象为中心,通过封装、继承和多态等特性来构建可维护和可扩展的系统。在Java这样的面向对象语言中,...在Java开发过程中,理解和应用这些面向对象设计原则是非常重要的。
Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...
面向对象设计是软件开发中的核心思想,...以上是根据61条Java面向对象设计原则的详细解读,这些原则帮助开发者编写更高效、易于理解和维护的代码。在实际编程中,灵活运用这些原则能够提高代码质量,减少后期维护成本。
在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起。本章节的源代码着重于讲解和实践Java中的面向对象特性,...
根据提供的文件信息,我们可以看出文档《Java面向对象设计.pdf》主要围绕Java语言中的面向对象设计原则进行介绍。从给出的部分内容中,我们可以提炼出以下知识点: 1. **Java基础语法**:文中包含了Java的基本...
以上只是Java面向对象设计的一些基础概念,实际的项目开发中,还需要考虑更多的设计原则,如单一职责原则、开闭原则、依赖倒置原则等,以及设计模式的应用,如工厂模式、单例模式、观察者模式等。在实践中不断学习和...
在IT行业中,面向对象设计(Object-Oriented Design,简称OOD)是一种常用的设计方法论,尤其在Java这样的面向对象编程语言中尤为重要。本篇将详细探讨如何使用Java进行门禁系统的面向对象设计。 门禁系统是用于...
面向对象设计原则,开闭原则,迪米特法则,里氏代换,接口隔离
学习Java面向对象编程不仅仅是掌握语法,更重要的是理解其设计理念和原则,如SOLID原则(单一职责、开闭、里氏替换、接口隔离、依赖倒置),以及设计模式的应用,如工厂模式、单例模式、观察者模式等。这些都将在...
Java面向对象应用程序开发是软件开发领域中的核心主题,尤其对于初学者和专业开发者而言,理解并掌握这一技术至关重要。Java语言以其强大的面向对象特性、跨平台兼容性以及丰富的类库,成为了开发各种类型应用程序的...
该书的特点是采用“从对象开始”的方式引导读者,从基础知识开始,逐步深入到高级主题,包括面向对象设计(OOD)、UML类图、编程揭示、调试提示与设计提示等。同时,本书还提供了205道自测题及答案、381道难度不一的...
《面向对象程序设计JAVA语言程序设计》涵盖了 Java 语言的基础知识点、设计原则、编程风格、多线程和并发、网络和 Web 编程、异常处理、安全和可靠性、Applet 和应用程序、设计模式、测试和调试等多方面的内容。
Java面向对象程序设计是计算机科学中的一个重要概念,尤其在软件开发领域中占据核心地位。本电子教案主要针对初学者,旨在提供一个简单易懂、实用的学习路径,帮助他们掌握Java编程语言的基础和面向对象的核心思想。...
标题:“Java面向对象设计” 描述:“找了很长时间的东东,拿到这里分享一下,大家可以先看看哦”。这句话虽然简短,但透露出分享者对“Java面向对象设计”这一主题的重视与热忱,以及希望通过分享促进大家共同学习...
Java_面向对象设计原则总结 一 类的设计原则 1 依赖倒置原则-Dependency Inversion Principle (DIP) 2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle...