Java程序员应该了解的10个面向对象设计原则
java面向对象设计知识点

java面向对象设计知识点在Java编程语言中,面向对象设计是一种强大且常用的编程范式。
它的核心思想是将现实世界中的事物抽象为对象,通过定义对象之间的关系和交互来构建软件系统。
在本文中,我将介绍一些Java面向对象设计的重要知识点。
一、类和对象在Java中,类是一种将属性和方法封装在一起的抽象数据类型。
它是面向对象编程的基础,用于创建对象。
对象是类的实例,可以通过new关键字来创建。
对象具有状态和行为,可以通过访问对象的属性和调用对象的方法来操作。
二、封装封装是面向对象设计的一个重要概念,它将类的属性和方法封装在一起,限制对内部数据的直接访问。
通过封装,可以隐藏对象的实现细节,提高代码的安全性和可维护性。
在Java中,可以使用访问修饰符(public、private、protected)来实现封装。
三、继承继承是面向对象设计的另一个核心概念,它允许一个类继承另一个类的属性和方法。
通过继承,可以实现代码的复用和扩展。
在Java中,使用关键字extends来实现类的继承。
子类可以继承父类的属性和方法,并且可以添加自己的属性和方法。
四、多态多态是面向对象设计的一个重要特性,它允许一个方法在不同的对象上具有不同的行为。
通过多态,可以提高代码的灵活性和可扩展性。
在Java中,多态可以通过方法重写(Override)和方法重载(Overload)来实现。
五、抽象类和接口抽象类和接口是面向对象设计中的两个重要概念。
抽象类是一种不能实例化的类,它可以包含抽象方法和具体方法。
接口是一组抽象方法的集合,它定义了一种行为规范。
通过抽象类和接口,可以实现代码的模块化和重用。
六、关联和依赖关联和依赖是描述类之间关系的重要概念。
关联表示类之间的对象关系,可以是一对一、一对多或多对多的关系。
依赖表示一个类依赖于另一个类的对象,表现为方法的参数或局部变量。
七、设计原则在面向对象设计中,有一些重要的设计原则可以指导程序员编写高质量的代码。
java 类的设计原则

java 类的设计原则Java类的设计原则在Java编程中,良好的类设计是一个重要的方面,它能够提高代码的可读性、可维护性和可扩展性。
以下是几个重要的Java类设计原则,可以帮助开发人员设计出高质量的类。
1. 单一职责原则(SRP)单一职责原则要求一个类应该只有一个引起它变化的原因。
换句话说,一个类应该只负责一项职责。
这样可以提高类的内聚性,减少类的复杂性。
如果一个类承担了过多的职责,那么它将变得难以理解、维护和扩展。
2. 开放-封闭原则(OCP)开放-封闭原则要求一个类应该对扩展开放,对修改封闭。
这意味着在修改现有代码之前,应该先尝试通过扩展来添加新的功能。
通过使用接口和抽象类,可以实现对代码的修改封闭,而通过继承和实现来实现对功能的扩展。
3. 里氏替换原则(LSP)里氏替换原则要求使用基类对象的地方必须能够使用其子类对象,而不会产生任何错误或异常。
这意味着子类必须能够完全替代父类。
遵循里氏替换原则可以提高代码的可重用性和可扩展性。
4. 依赖倒置原则(DIP)依赖倒置原则要求高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
这意味着应该通过接口或抽象类来定义模块之间的依赖关系,而不是具体的实现类。
依赖倒置原则可以降低模块之间的耦合性,提高代码的灵活性和可测试性。
5. 接口隔离原则(ISP)接口隔离原则要求一个类不应该依赖于它不需要的接口。
换句话说,一个类只应该依赖于它需要的接口。
接口隔离原则可以避免类与不相关的接口产生耦合,提高代码的可维护性和可复用性。
6. 迪米特法则(LOD)迪米特法则要求一个对象应该对其他对象有尽可能少的了解。
一个类不应该依赖于其他不相关的类。
迪米特法则可以降低类之间的耦合性,提高代码的模块化和可复用性。
7. 合成复用原则(CRP)合成复用原则要求尽量使用合成/聚合关系,而不是继承关系来实现代码的复用。
通过将对象组合在一起,可以灵活地改变它们的行为,而不需要修改类的代码。
面向对象的原则

面向对象的原则面向对象的原则是指设计和编程中应该使用的一组思想,旨在提高软件质量和增强可维护性。
以下是8大基本面向对象原则:1. 单一职责原则(Single Responsibility Principle):单一职责原则要求每个类必须针对一个单独的职责,职责的定义是指类要完成的任务。
每个类就像拼图碎片,他只能完成一个部分,而不是全部。
2. 开发-封闭原则(Open-Closed Principle):开发-封闭原则要求软件实体(类、模块等)在不修改原有代码的前提下,能够扩展功能,而不是对原代码进行修改。
3. 里氏替换原则(Liskov Substitution Principle):里氏替换原则要求子类必须能够替换父类,可以独立使用,在继承关系中被替换,而不会让系统崩溃。
4. 接口分离原则(Interface Segregation Principle):接口分离原则要求系统中的接口必须被分离,每个接口尽量简单单一,只允许一种用法,以减少实现它的各种开发成本和难度。
5. 依赖反转原则(Dependency Inversion Principle):依赖反转原则要求高层模块不能依赖于低层模块,两者都要依赖于抽象,也就是都依赖于接口或抽象类。
6. 迪米特法则(Demeter Principle):迪米特法则要求一个对象应该对其他对象有最少的了解,一个类应该对其他类保持最少的耦合。
7. 合成复用原则(Composite Reuse Principle):合成复用原则要求在实现复用时,优先选择组合/聚合的方式,而不是继承。
8. 对象中心设计原则(Object-Centered Design Principle):对象中心设计原则要求软件设计师在他们的设计中心对象,对他们周围的环境作出反应,而采取何种方式来使得总体运行更加顺畅,这是设计师必须考虑的。
面向对象设计原则

面向对象设计原则面向对象设计原则是一系列在面向对象编程中应用的设计原则,它们可以帮助我们构建可维护、可扩展和可重用的软件系统。
下面是其中一些重要的面向对象设计原则:1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起变化的原因。
换句话说,每个类应该只负责处理单一的责任,这样可以提高类的内聚性,降低类的耦合度,增强系统的模块化和扩展性。
2. 开放封闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。
这意味着在不修改已有代码的情况下,可以通过扩展现有代码来实现新功能。
这样可以提高系统的可维护性和可复用性。
3. 里氏替换原则(Liskov Substitution Principle,LSP):子类型必须能够替换掉它们的父类型,而对应的系统行为不应该发生改变。
简而言之,任何基类可以被它的子类替代,而且原本运行的代码可以正常工作。
4. 依赖倒置原则(Dependence Inversion Principle,DIP):高层模块不应该依赖低层模块,它们共同依赖于抽象。
简而言之,模块之间的依赖关系应该通过接口或抽象类来实现,而不是具体的实现类。
5. 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该强迫依赖它不需要的接口。
接口应该足够小,只包含客户端所需的方法,避免接口臃肿和功能耦合。
6. 迪米特法则(Law of Demeter,LoD):一个对象应当尽可能少地与其他对象之间进行相互作用。
简而言之,一个对象应该只与其直接朋友进行通信,不要和陌生对象发生直接的交互。
这些面向对象设计原则可以帮助我们构建具有高内聚、低耦合的软件系统。
它们提供了一系列指导原则,有助于我们在设计和实现过程中做出更好的选择,并提供了一些模式和原则,可以帮助我们解决常见的设计问题。
JAVA设计的七大原则

JAVA设计的七⼤原则⼀、开闭原则 开闭原则(Open-Closed Principle, OCP)是指⼀个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
所谓的开闭,也正是对扩展和修改两个⾏为的⼀个原则。
强调的是⽤抽象构建框架,⽤实现扩展细节。
可以提⾼软件系统的可复⽤性及可维护性。
开闭原则,是⾯向对象设计中最基础的设计原则。
它指导我们如何建⽴稳定灵活的系统,实现开闭原则的核⼼思想就是⾯向抽象编程。
⼆、依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,⾼层模块不应该依赖底层模块,⼆者都应该依赖其抽象。
通过依赖倒置,可以减少类与类之间的耦合性,提⾼系统的稳定性,提⾼代码的可读性和可维护性,并能够降低修改程序所造成的风险。
下⾯我们通过⼀个例⼦来具体阐述: ⾸先创建⼀个MyCar类,假如你现在有两辆车public class MyCar {public void AudiCarDriving() {System.out.println("AudiCar is drving ……");}public void BWMCarDriving() {System.out.println("BWMCar is drving ……");}} 但是随着你经济的逐渐飙升,⼜买下⼀辆车,这个时候,业务扩展,我们的代码要从底层到⾼层(调⽤层)依次修改代码。
在 MyCar 类中增加 xxxCarDriving()的⽅法,在⾼层也要追加调⽤。
如此⼀来,系统发布以后,实际上是⾮常不稳定的,在修改代码的同时也会带来意想不到的风险。
接下来我们优化代码,创建⼀个课程的抽象 CarDriving 接⼝:public interface CarDriving {void driving();}/*** 创建AudiCar 类*/public class AudiCar implements CarDriving {@Overridepublic void driving() {System.out.println(this.getClass().getSimpleName()+"is drving ……");}}/*** 创建BWMCar类*/public class BWMCar implements CarDriving {@Overridepublic void driving() {System.out.println(this.getClass().getSimpleName()+"is driving ……");}}/*** 优化之前的MyCar 类*/public class MyCar {public void driving(CarDriving carDriving) {carDriving.driving();}}//调⽤public static void main(String[] args) {MyCar myCar = new MyCar();myCar.driving(new AudiCar());myCar.driving(new BWMCar());} 我们这时候再看来代码,⽆论你有多少车,对于新车,我只需要新建⼀类,通过传参的⽅式告诉MyCar,⽽不需要修改底层代码。
面向对象设计的准则

面向对象设计的准则面向对象设计是一种软件开发方法,它将问题领域中的实体看作是对象,并通过定义对象之间的关系和行为来解决问题。
在进行面向对象设计时,我们需要遵循一些准则,以确保设计出高质量、可维护、可扩展的软件系统。
本文将介绍面向对象设计的准则,并详细讨论每个准则的重要性和应用方法。
单一职责原则(Single Responsibility Principle)单一职责原则指出一个类应该只有一个引起它变化的原因。
换句话说,一个类应该只有一个责任。
这样做可以提高代码的可读性、可维护性和可测试性。
如果一个类承担了过多的责任,那么当需求发生变化时,需要修改这个类的可能性就更大。
例如,在一个电子商务系统中,我们可以将订单管理功能分成两个类:订单创建和订单支付。
这样做既符合单一职责原则,也方便了后续对订单创建和支付逻辑的修改和扩展。
开放封闭原则(Open-Closed Principle)开放封闭原则指出软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
也就是说,在增加新功能时,我们应该尽量避免修改已有的代码,而是通过扩展现有代码来实现新功能。
这样可以减少对已有功能的影响,并提高代码的可维护性和稳定性。
为了满足开放封闭原则,我们可以使用抽象和多态来实现可扩展的设计。
例如,通过定义一个抽象基类和多个具体子类来表示不同类型的支付方式,当需要增加新的支付方式时,只需要添加一个新的子类即可。
里氏替换原则(Liskov Substitution Principle)里氏替换原则指出,子类对象应该能够替换掉父类对象,并且程序不应该受到影响。
也就是说,在使用父类对象的地方,我们可以用子类对象来替代,并且不会产生任何错误或异常。
遵循里氏替换原则可以提高代码的可复用性和扩展性。
当我们在设计继承关系时,需要确保子类能够完全符合父类定义的行为规范,并且不改变父类已有的行为。
依赖倒置原则(Dependency Inversion Principle)依赖倒置原则指出高层模块不应该依赖于低层模块,它们都应该依赖于抽象。
java 设计模式原则
java 设计模式原则Java设计模式原则是指在Java编程中,遵循一定的设计原则,以提高代码的可读性、可维护性、可扩展性和可重用性。
这些原则是经过实践总结出来的,可以帮助开发人员更好地设计和开发Java应用程序。
1. 单一职责原则(SRP)单一职责原则是指一个类只负责一个功能,即一个类只有一个引起它变化的原因。
这样可以使类的职责更加明确,代码更加清晰,易于维护和扩展。
2. 开放封闭原则(OCP)开放封闭原则是指一个类应该对扩展开放,对修改关闭。
即在不修改原有代码的情况下,通过扩展来实现新的功能。
这样可以使代码更加稳定,易于维护和扩展。
3. 里氏替换原则(LSP)里氏替换原则是指子类可以替换父类并且不会影响程序的正确性。
即子类应该继承父类的所有属性和方法,并且可以在不改变父类原有功能的情况下增加新的功能。
4. 依赖倒置原则(DIP)依赖倒置原则是指高层模块不应该依赖低层模块,而是应该依赖抽象接口。
即应该通过接口来实现模块之间的解耦,使得代码更加灵活、可扩展和可维护。
5. 接口隔离原则(ISP)接口隔离原则是指一个类不应该依赖它不需要的接口。
即应该将接口拆分成更小的接口,使得每个类只依赖于它需要的接口,从而避免不必要的依赖关系。
6. 迪米特法则(LoD)迪米特法则是指一个对象应该对其他对象有尽可能少的了解。
即应该尽量减少对象之间的耦合,使得代码更加灵活、可扩展和可维护。
以上是Java设计模式原则的六个基本原则,这些原则可以帮助开发人员更好地设计和开发Java应用程序。
在实际开发中,应该根据具体情况选择合适的设计模式和原则,以提高代码的质量和效率。
java 开发原则
java 开发原则Java开发原则Java作为一种广泛应用于软件开发领域的编程语言,具有其特有的开发原则。
本文将介绍一些Java开发的基本原则,以帮助开发人员编写高质量、可维护和可扩展的Java代码。
一、面向对象编程(OOP)面向对象编程是Java的核心思想之一。
它将现实世界中的事物抽象为对象,并通过类和对象的定义来描述和处理问题。
面向对象编程的特点包括封装、继承和多态。
在Java开发中,我们应该遵循面向对象编程的原则,将代码组织成可重用的类和对象,并尽量减少全局变量的使用。
二、代码复用代码复用是提高开发效率和代码质量的关键。
在Java开发中,我们可以通过继承、接口和组合等方式来实现代码的复用。
继承可以让子类继承父类的属性和方法,接口定义了一组规范,可以被多个类实现,组合则是将多个类组合在一起以实现更复杂的功能。
三、单一职责原则(SRP)单一职责原则要求一个类或方法只负责一项功能。
这样可以提高代码的可读性和可维护性。
当一个类或方法负责过多的功能时,会导致代码的耦合度增加,难以理解和修改。
因此,我们应该将不同的功能分解到不同的类或方法中,每个类或方法只负责一项具体的功能。
四、开放封闭原则(OCP)开放封闭原则要求软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。
这意味着我们应该通过扩展现有的代码来实现新的功能,而不是修改已有的代码。
这样可以减少对已有功能的影响,提高代码的稳定性和可维护性。
五、代码可读性与可维护性代码可读性和可维护性是衡量代码质量的重要指标。
在Java开发中,我们应该注重编写具有良好命名规范的变量、方法和类,避免使用过长或过于复杂的命名。
同时,我们应该使用适当的注释来解释代码的功能和实现细节,以方便他人理解和修改代码。
六、异常处理异常处理是Java开发中的重要部分。
在编写代码时,我们应该考虑到可能出现的异常情况,并合理地处理这些异常。
合理的异常处理可以提高代码的健壮性和可靠性。
Java面向对象设计的六大原则
Java⾯向对象设计的六⼤原则这是设计模式系列开篇的第⼀篇⽂章。
也是我学习设计模式过程中的总结。
这篇⽂章主要讲的是⾯向对象设计中,我们应该遵循的六⼤原则。
只有掌握了这些原则,我们才能更好的理解设计模式。
我们接下来要介绍以下6个内容。
单⼀职责原则——SRP开闭原则——OCP⾥式替换原则——LSP依赖倒置原则——DIP接⼝隔离原则——ISP迪⽶特原则——LOD单⼀职责原则单⼀职责原则的定义是就⼀个类⽽⾔,应该仅有⼀个引起他变化的原因。
也就是说⼀个类应该只负责⼀件事情。
如果⼀个类负责了⽅法M1,⽅法M2两个不同的事情,当M1⽅法发⽣变化的时候,我们需要修改这个类的M1⽅法,但是这个时候就有可能导致M2⽅法不能⼯作。
这个不是我们期待的,但是由于这种设计却很有可能发⽣。
所以这个时候,我们需要把M1⽅法,M2⽅法单独分离成两个类。
让每个类只专⼼处理⾃⼰的⽅法。
单⼀职责原则的好处如下:可以降低类的复杂度,⼀个类只负责⼀项职责,这样逻辑也简单很多提⾼类的可读性,和系统的维护性,因为不会有其他奇怪的⽅法来⼲扰我们理解这个类的含义当发⽣变化的时候,能将变化的影响降到最⼩,因为只会在这个类中做出修改。
开闭原则开闭原则和单⼀职责原则⼀样,是⾮常基础⽽且⼀般是常识的原则。
开闭原则的定义是软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是对于修改是关闭的。
当需求发⽣改变的时候,我们需要对代码进⾏修改,这个时候我们应该尽量去扩展原来的代码,⽽不是去修改原来的代码,因为这样可能会引起更多的问题。
这个准则和单⼀职责原则⼀样,是⼀个⼤家都这样去认为但是⼜没规定具体该如何去做的⼀种原则。
开闭原则我们可以⽤⼀种⽅式来确保他,我们⽤抽象去构建框架,⽤实现扩展细节。
这样当发⽣修改的时候,我们就直接⽤抽象了派⽣⼀个具体类去实现修改。
⾥⽒替换原则⾥⽒替换原则是⼀个⾮常有⽤的⼀个概念。
他的定义如果对每⼀个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都替换成o2的时候,程序P的⾏为都没有发⽣变化,那么类型T2是类型T1的⼦类型。
面向对象编程的12条原则
面向对象编程的12条原则面向对象编程(Object Oriented Programming,简称OOP)是一种编程范式,通过将数据和操作组织为对象,实现更加灵活的编程方式。
在OOP中,有一些基本准则被视为重要的原则,它们指导着开发者们的编程实践。
以下是面向对象编程的12条原则。
一、单一职责原则一个类应该只有一个引起它变化的原因。
这意味着一个类只负责一项职责,如果一个类有多个职责,那么将会难以维护和扩展。
二、开放封闭原则一个软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
也就是说,在不改变代码的前提下,可以增加新功能。
三、里氏替换原则子类必须能够替换掉它们的父类。
也就是说,在所有需要父类对象的地方,都可以使用它的子类对象来代替,而不会产生任何错误或异常。
四、接口隔离原则客户端不应该强制依赖它们不需要使用的接口。
应该将一个大的接口拆分为多个小的接口,让客户端只需要依赖它们需要使用的接口。
五、依赖倒置原则高层次的模块不应该依赖于低层次的模块,而是应该依赖于抽象。
这意味着我们应该依赖于接口或抽象类,而不是具体的实现类。
六、迪米特法则(最少知识原则)一个对象应该对其他对象有最少的了解。
也就是说,一个对象不应该直接和其他对象通信,而是通过中间对象来通信。
七、合成复用原则优先使用对象的组合和聚合关系,而不是继承关系,来达到代码复用的目的。
这样可以减少代码的耦合度,提高代码的灵活性。
八、代码重构原则当面临代码复杂性、代码难以维护或可读性差的时候,应该将代码进行重构,使其更易于理解和维护。
重构可以是比较小的改变,也可以是较大的改变。
九、KISS原则“Keep it Simple, Stupid”是指保持代码简单而易于理解。
简单的代码更容易维护和调试,同时也更容易让其他人理解代码的含义。
十、YAGNI原则“You Ain't Gonna Need It”的意思是指,在代码实现时,不要过度设计或实现功能,因为你很可能不需要它。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设
计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样
的设计模式,而不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没有听说
过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原
则来进行编程。
众所周知,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。
虽然实际案例是学习设计原则或模式的最佳途径,但通过本文的介绍,没有接触过这些原则
或还在学习阶段的Java程序员也能够了解这10个面向对象的设计原则。其实每条原则都
需要大量的篇幅才能讲清楚,但我会尽力做到言简意赅。
原则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() 方法。为了平等地比较两个对象,
我们用类本身而不是客户端类来做比较。这个设计原则的好处是没有重复的代码,而且很容
易对其进行修改。
总之,希望这些面向对象的设计原则能帮助你写出更灵活更好的代码。理论是第一步,更重
要的是需要开发者在实践中去运用和体会。