远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
    • 分布式一致性协议之三阶段提交协议(3PC)
    • 分布式一致性协议之NWR协议
    • 分布式一致性协议之Gossip协议
    • 分布式一致性协议之Paxos协议
    • 分布式一致性协议之Raft协议
    • 分布式一致性协议之Lease机制
    • 分布式系统设计策略之心跳检测
    • 分布式系统设计策略之高可用
    • 分布式系统设计策略之容错性
    • 分布式系统设计策略之负载均衡
    • 分布式架构服务调用
    • 分布式服务治理之服务协调
    • 分布式服务治理之服务削峰
    • 分布式服务治理之服务降级
    • 分布式服务治理之服务限流
    • 分布式服务治理之服务熔断
    • 分布式服务治理之服务链路追踪
    • 架构设计基本原则之开闭原则(OCP)
      • 开闭原则(OCP)
        • 开闭原则的定义
        • 开闭原则的作用
        • 开闭原则的实现方法
    • 架构设计基本原则之单一职责原则(SRP)
    • 架构设计基本原则之接口隔离原则(ISP)
    • 架构设计基本原则之里式替换原则(LSP)
    • 架构设计基本原则之依赖倒置原则(DIP)
    • 架构设计基本原则知识扩展
    • 分布式架构知识拓展与总结
  • 分布式框架

  • 后端开发
  • 分布式
terwer
2022-04-17
目录

架构设计基本原则之开闭原则(OCP)

本文介绍了一个良好的可扩展性的架构需要遵守的原则。

# 架构设计基本原则

2022/04/16 校对完成

文章更新历史

2022/04/16 初稿。

# 开闭原则(OCP)

OCP , Open Close Principle 开闭原则

# 开闭原则的定义

开闭原则:软件实体应该对扩展开放,对修改关闭

软件实体包含几个部分

  1. 项目中划分出来的模块
  2. 类与接口
  3. 方法

开闭原则的含义:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新需求。

# 开闭原则的作用

使软件实体拥有一定的适应性和灵活性,同时兼备稳定性和延续性。作用如下:

  1. 对软件测试的影响
  2. 提高代码的可复用性
  3. 提高代码的可维护性

# 开闭原则的实现方法

可通过“抽象约束、封装变化”来实现开闭原则。

通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,将可变因素封装在具体实现中。

实例:

  1. 学校有很多课程,课程有一门是Java,需要打印课程ID、名称以及售价。

    新建一个接口类 ICourse 和 Java课程类 JavaCourse ,JavaCourse 实现 ICourse 的接口。

    image-20220414195036258

  2. 赶上促销活动,Java课程打六折,有几种处理方案

    • 第一种

      ICourse 接口新增方法 getDiscountPrice() ,但是,这样的话,所有实现 ICourse 接口的方法都要增加一个方法。

    • 第二种

      需修改 JavaCourse 类, 但是,这样会破坏 JavaCourse 原本稳定的代码,不合理。

    • 第三种

      新建一个 JavaDiscountCourse 类,继承 JavaCourse ,并增加一个打折方法。

      image-20220414224432172

编辑 (opens new window)
#arch#desgin#ocp
上次更新: 2023/02/22, 13:47:25
分布式服务治理之服务链路追踪
架构设计基本原则之单一职责原则(SRP)

← 分布式服务治理之服务链路追踪 架构设计基本原则之单一职责原则(SRP)→

最近更新
01
解决css部分border被圆角切掉之后圆角的边框消失问题
03-18
02
使用TypeScript开发一个自定义的Node-js前端开发脚手架
03-08
03
Github-Actions使用release-please实现自动发版
03-06
更多文章>
Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式