avatar

一条在知识海洋的咸鱼

这个家伙很懒,啥也没有留下😋

  • 首页
  • Linux
  • OCJP
  • Java核心技术卷
  • J2EE相关标准
  • 深入理解Java虚拟机
  • NIO与SOcket编程技术指南
  • Java多线程编程核心技术
  • Redis开发与运维
  • Spring Cloud Alibaba 微服务原理与实践
  • DevOps
  • Docker
  • MySQL必知必会
  • AI自学路线
  • Spring Boot 编程思想(核心篇)
主页 软件架构设计原则
文章

软件架构设计原则

发表于 2022-07-3 更新于 2026-06- 10
作者 Administrator
16~20 分钟 阅读

个人看书理解,主要是写代码实操,方便以后复习,而不是文字性的东西

  • 开闭原则OCP
    • 代码
  • 依赖倒置原则DIP
    • 代码
  • 单一职责原则SRP
    • 代码
  • 接口隔离原则ISP
    • 代码
  • 迪米特法则LoD
    • 代码
  • 里氏替换原则LSP
  • 合成复用原则CARP
    • 代码

开闭原则OCP

  • 定义
    对扩展开放,对修改关闭。
    用抽象构建框架,用实现扩展细节,核心思想是面向抽象。
    禁止修改上曾的抽象,但是可以用继承拓展底层的实现功能

  • 目的
    不修改源代码,灵活拓展新功能
    image.png

代码

interface IA {
    void doIA();
}

interface IB {
    void doIB();
}

class CA implements IA {

    @Override
    public void doIA() {

    }
}

class CB extends CA implements IB {
    @Override
    public void doIA() {
//        super.doA();
        //TODO 修改的逻辑
    }

    @Override
    public void doIB() {

    }
}

当需要对CA的功能进行修改时,为确保不影响其他使用CA的模块,应该使用CB继承CA同事实现新的功能拓展接口IB。IB的接口即为抽象出来的拓展功能接口

依赖倒置原则DIP

  • 定义
    高层模块不依赖底层模块,而是都依赖于其抽象
    抽象不依赖细节,细节依赖抽象

  • 目的
    降低类之间的耦合性

代码

image.png

interface IA {
    void doIA();
}

class CA implements IA {

    @Override
    public void doIA() {

    }
}

class CB implements IA {

    @Override
    public void doIA() {

    }
}

class Client {
    private IA ia;

    //构造注入
    public Client(IA ia) {
        this.ia = ia;
    }

    //setter注入
    public void setIa(IA ia) {
        this.ia = ia;
    }

    void doClient() {
        ia.doIA();
    }

    public static void main(String[] args) {
        //构造注入
        Client client = new Client(new CA());
        client.doClient();
        //setter注入
        client.setIa(new CB());
        client.doClient();
    }
}

面向接口变成,先顶层抽象,再具体细节,

单一职责原则SRP

  • 定义
    一个Class、Interface、Method只负责一项职责,如果类变更应该也只存在单个职责原因变更
  • 目的
    降低类的复杂度、提高可读性、可维护性

代码

image.png

interface IA{
    void doIA();
}
interface IB{
    void doIB();
}

class CA implements IA,IB{

    @Override
    public void doIA() {

    }

    @Override
    public void doIB() {

    }
}

类的单一职责收到依赖、组合、聚合等关系的影响很难保证单一职责,
应让接口、方法等抽象和细节保证单一职责

接口隔离原则ISP

  • 定义
    应使用多个接口、不应使用单一的总接口、不依赖不需要的接口
    类的依赖建立在最小接口上
    建立单一接口
    细化接口、减少接口的方法,这建立在业务的抽象理解上
  • 目的
    具有高内聚、低耦合、可读性、可扩展性、可维护性

代码

image.png

interface WalkRebot {
    void doWale();
}

interface JobRebot {
    void doJob();
}

interface DriveRebot {
    void doDrive();
}

class MyRobot implements WalkRebot, JobRebot, DriveRebot {
    @Override
    public void doWale() {
        
    }

    @Override
    public void doJob() {

    }

    @Override
    public void doDrive() {

    }
}

其要求有更高的抽象性,将共性、非共性的特征抽象出来

迪米特法则LoD

  • 定义
    最少知道原则LKP,对象之间应保持最少的了解
  • 目的
    降低对象和对象、类和类之间的耦合性,禁止滥用继承

代码

class CA {
    void doCA() {
        //doSomething
    }
}

class CB {
    void doCB() {
        //doSomething
        new CA().doCA();
    }
}

class CC {
    void doCC() {
        new CB().doCB();
    }
}

class Client {
    public static void main(String[] args) {
        new CC().doCC();
    }
}

客户端只需要CC去执行方法,而不用去关注CC是怎么去执行的,CC和CA是解耦的

里氏替换原则LSP

  • 定义
    如果适用于父类,则一定适用于子类,所有引用父类的地方都可以使用其子类对象,子类对象可以替换父类对象而保持逻辑不变
    1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
    2.子类可以增加自己的方法
    3.子类的重写父类方法时,其条件必须不能比父类严格,可以宽松

合成复用原则CARP

  • 定义
    尽量使用对象组合、聚合实现代码复用,其优先级高于继承
    1.组合聚合可以使类与类耦合度降低
    2.继承把细节暴露给子类,增加了代码复杂度
  • 目的
    降低耦合度

代码

class CA implements IA {

    @Override
    public void doIA() {

    }
}

class CB implements IA {

    @Override
    public void doIA() {

    }
}

class Client {
    private IA ia;

    public Client(IA ia) {
        this.ia = ia;
    }

    public void doClient() {
        ia.doIA();
    }
}






设计模式
许可协议: 
分享

相关文章

7月 3, 2022

软件架构设计原则

个人看书理解,主要是写代码实操,方便以后复习,而不是文字性的东西开闭原则OCP代码依赖倒置原则DIP开闭原则OCP定义对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节,核心思想是面向抽象。禁止修改上曾的抽象,但是可以用继承拓展底层的实现功能目的不修改源代码,灵活拓展新功能代码interface

下一篇

Oracle 19C OCP大纲

上一篇

编写、调试、测试函数

最近更新

  • 55 异常兜底:工具失败、非法输出、空检索与超时
  • 54 Agent Memory:短期记忆、用户上下文与摘要
  • 53 Human-in-the-loop:让关键动作暂停、确认与恢复
  • 52 工单 Tool:字段校验、创建结果与失败补偿
  • 51 订单 Tool:Mock、鉴权、状态解析与脱敏

热门标签

java基础 微服务 maven Spring Tomcat DDD Linux Linux基础 SQL基础 数据结构算法

目录

©2026 一条在知识海洋的咸鱼. 保留部分权利。

使用 Halo 主题 Chirpy