| 对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。 |
| 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2 |
| 1) 降低类的复杂度,一个类只负责一项职责。 |
| 2) 提高类的可读性,可维护性 |
| 3) 降低变更引起的风险 |
| 4) 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则 |
| # 案例1:执行方法会打印出不合理的语句 |
| package com.atguigu.principle.singleresponsibility; |
| public class SingleResponsibility1 { |
| public static void main(String[] args) { |
| |
| Vehicle vehicle = new Vehicle(); |
| vehicle.run("摩托车"); |
| vehicle.run("汽车"); |
| vehicle.run("飞机"); |
| } |
| } |
| |
| |
| |
| |
| |
| class Vehicle { |
| public void run(String vehicle) { |
| System.out.println(vehicle + " 在公路上运行...."); |
| } |
| } |
| |
| # 案例2:拆分成多个类的时候,代码臃肿 |
| package com.atguigu.principle.singleresponsibility; |
| public class SingleResponsibility2 { |
| public static void main(String[] args) { |
| |
| RoadVehicle roadVehicle = new RoadVehicle(); |
| roadVehicle.run("摩托车"); |
| roadVehicle.run("汽车"); |
| AirVehicle airVehicle = new AirVehicle(); |
| airVehicle.run("飞机"); |
| } |
| } |
| |
| |
| |
| |
| |
| class RoadVehicle { |
| public void run(String vehicle) { |
| System.out.println(vehicle + "公路运行"); |
| } |
| } |
| |
| class AirVehicle { |
| public void run(String vehicle) { |
| System.out.println(vehicle + "天空运行"); |
| } |
| } |
| |
| class WaterVehicle { |
| public void run(String vehicle) { |
| System.out.println(vehicle + "水中运行"); |
| } |
| } |
| |
| # 案例3 |
| package com.atguigu.principle.singleresponsibility; |
| public class SingleResponsibility3 { |
| public static void main(String[] args) { |
| |
| Vehicle2 vehicle2 = new Vehicle2(); |
| vehicle2.run("汽车"); |
| vehicle2.runWater("轮船"); |
| vehicle2.runAir("飞机"); |
| } |
| } |
| |
| |
| |
| |
| class Vehicle2 { |
| public void run(String vehicle) { |
| |
| System.out.println(vehicle + " 在公路上运行...."); |
| } |
| public void runAir(String vehicle) { |
| System.out.println(vehicle + " 在天空上运行...."); |
| } |
| public void runWater(String vehicle) { |
| System.out.println(vehicle + " 在水中行...."); |
| } |
| |
| |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?