Java 学习笔记 面向对象的七大设计原则

本文介绍了Java编程中的面向对象设计七大原则,包括单一职责原则、开闭原则、里氏替换原则、依赖倒转原则、接口隔离原则、合成复用原则和迪米特法则。详细阐述了每个原则的含义、应用示例和遵循这些原则的重要性,旨在提升代码的可维护性和可扩展性。
摘要由CSDN通过智能技术生成

参考资料


参考资料:视频资料

面向对象设计,Object Oriented Design,简称OOD。

在进行软件开发时,需要考虑项目的可维护性和可复用性,开发项目一般是由一个开发团队来维护,因此我们在编写代码时,应可能规范,防止项目出现越来越多的BUG。

一、单一职责原则 SRP


参考资料:查看文档

单一职责原则, Single Responsibility Principle 又称单一功能原则,是最简单的面向对象设计原则,用于控制类的粒度大小。
出自《敏捷软件开发:原则、模式与实践》 Robert C. Martin

一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中

例:用类描述人们的会做的事情

  • 反例:违背 SRP 单一职责原则
public class People{
   
    // 程序员: 敲代码
    public void coding(){
   }
    // 飞行员: 驾驶飞机
    public void pilot(){
   }
}

类中出现了范围偏多的敲代码和驾驶飞机,实际上,生活中很少有人同时具备这两项技能,故根据 SRP 原则,上述的类应变更为:

  • 正例:符合 SRP 原则
// 程序员
class Programmer{
   
     public void coding(){
   }   
}

// 飞行员
class Piloter{
   
     public void pilot(){
   }   
}

总结:SRP 单一职责原则 要求在设计类的时候,里面的方法或属性是同一类的,颗粒度尽可能小的。

二、开闭原则 OCP


参考资料:查看文档
开闭原则,Open Close Principle,OCP 原则规定软件中的对象(类、模块、函数等)应对扩展开放,对修改关闭。
出自:《面向对象软件构造》

软件对扩展(提供方)开放,对修改(调用方)关闭

正例:用类描述不同编程语言领域的程序员

public abstract class Programmer{
   
     public abstract void Codding(); 
}

// Java程序员
class JavaProgrammer extends Programmer{
   
    @Override
    public void coding(){
   }
}

// Python 程序员
class PythonProgrammer extends Programmer{
   
    @Override
    public void coding(){
   }
}

// C++语言程序员
class CppProgrammer extends Programmer{
   
    @Override
    public void coding(){
   }
}

通过提供一个 Programmer 抽象类,定义出编程的抽象行为,这样给其他具体类型的程序员来实现,这样就可以根据不同的业务进行灵活扩展,具有更好的扩展性。除了抽象类,更多的则是使用接口和接口实现类来遵循OCP原则

三、里氏替换原则 LSP


参考资料:查看文档

里氏替换原则,Liskov Substitution Principle,LSP 原则是对子类型的特别定义。

出自:演讲《数据的抽象与层次》 Barbara Liskov

所有引用基类的地方必须能透明的使用其子类的对象

简单来说,子类可以扩展父类的功能,但不能改变父类原有的功能:

  1. 子类可以实现父类的抽象方法,但不能覆盖父类原有的功能
  2. 子类可以增加自己持有的方法
  3. 子类重载父类方法时,方法的前置条件(即方法的入参)要比父类的该方法入参更宽松
  4. 子类实现父类方法时,(重写/重载或实现抽象方法),方法的后置条件(即方法的输出/返回值)要比父类更严格或与父类一样

例: 描述一个Java程序员会做的事情
反例:违背 LSP 原则

public abstract class Programmer{
   
    public void coding()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值