本文共 3657 字,大约阅读时间需要 12 分钟。
单一职责原则(Single Responsibility Principle,SRP)是软件开发中的一个核心原则。它的英文名称是 single responsibility principle,简称SRP。简单来说,有且仅有一个原因引起类的变更。一个类不能承担多于一个职责。
里氏替换原则(Liskov Substitution Principle,LSP)是软件开发中的一个重要原则。它的英文名称是 Liskov Substitution Principle,简称LSP。它的核心思想是:所有引用基类的地方必须透明地使用子类的对象。使用者察觉不到是基类还是子类。例如,白马和黑马都是马的子类。如果一个操作 rideHorse 以马为参数,那么白马和黑马也可以作为参数。然而,反过来则不成立:白马和黑马能出现的地方,马则不能。
依赖倒置原则(Dependence Inversion Principle,DIP)是软件开发中的一个重要原则。它的英文名称是 Dependence Inversion Principle,简称DIP。在Java中的表现是:
接口隔离原则(Interface Segregation Principle,ISP)是软件开发中的一个重要原则。它的英文名称是 Interface Segregation Principle,简称ISP。它有两种定义:
假设我们有一个关于“美女”的接口:
public interface Beautiful { void hasBeautifulFace(); void hasGoodFigure(); void hasGoodPersonality();}
随着时代的发展,审美标准的变化让“有气质好的美女”可以不再满足“有脸蛋好”和“有身材好”的标准。因此,我们可以将“脸蛋好”和“身材好”封装成一个接口,而“气质好”单独作为一个接口:
public interface BeautifulFace { void hasBeautifulFace();}public interface BeautifulFigure { void hasGoodFigure();}public interface BeautifulPersonality { void hasGoodPersonality();}
这样,客户端只需要依赖它需要的接口,而不依赖它不需要的接口。
迪米特原则(Demeter's Law,Law of Demeter,LoD),也被称为最少知识原则(Least Knowledge Principle,LKP)。它的英文名称是 Law of Demeter,简称LoD。其核心思想是:一个对象应该对其他对象有最少的了解。具体来说,一个对象只能调用其他对象的public方法,其他的它不需要知道。
安装软件的过程:
public class InstallSoftware { public void install() { wizard.installSoftware(); }}public class Wizard { public Software installSoftware() { // install logic }}public class Software { public void installWizard() { // install logic }}
如果 wizard 的方法返回参数变更,会导致 installSoftware 也需要跟随修改,这种耦合度过高。改进方式是将 wizard 的方法改为私有,封装成一个 installWizard() 方法,提供给 installSoftware。
开闭原则(Open-Closed Principle,OCP)是软件开发中的一个重要原则。它的英文名称是 Open-Closed Principle,简称OCP。它的核心思想是:一个软件实体(如类、模块或函数)对扩展开放,对修改关闭。通过扩展实现变化,而不是通过修改。
假设我们有一个交通工具类:
public abstract class Vehicle { abstract void drive();}public class Car extends Vehicle { @Override void drive() { // drive logic }}public class Bike extends Vehicle { @Override void drive() { // bike drive logic }}
如果需要新增一种交通工具,比如摩托车(Motorcycle),我们只需要创建一个新的子类:
public class Motorcycle extends Vehicle { @Override void drive() { // motorcycle drive logic }}
而不需要修改现有的 Vehicle 类或 Car 类。
通过遵循这些设计模式,我们可以设计出更高质量、更易于维护和扩展的软件系统。
转载地址:http://vphwz.baihongyu.com/