设计模式 六大原则之开放封闭原则

文章目录

  • 定义
    • 理解
  • 小结

定义

开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。

理解

怎么理解这个呢?
看上段中标黄的字体。对扩展开放,对修改封闭。跟面向对象结合,就是有中面向接口编程的感觉。举个ue中的例子,如下图:
在这里插入图片描述
pawn类继承一个接口INavAgentInterface类,看下这个类:
在这里插入图片描述
随便找个函数吧,GetNavAgentLocation(),以这个函数为例,看看接口类和pawn类都怎么写的。
先看看接口类:
在这里插入图片描述
再来看看pawn类,如下:

在这里插入图片描述
其实,这种设计,在一些大型项目中都很常用,可以看看其他的。不一一列举。

小结

开放封闭原则是一种很经典的使用技巧,在源码中很常见。

开放封闭原则是很经典的,在几乎所有的语言底层都随处可见。有时间,我们都可以看看,学习学习自己熟悉的语言。包括现在流行的lanchain,这种设计也是很常见。对扩展开放,对修改封闭。这个很重要。ok,翻篇。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP笔记

1. 搭建运行环境 1.1 挂载光盘 [rootredhat200 ~]# mount /dev/sr0 /mnt 1.2 配置仓库 # 查看仓库列表 [rootredhat200 ~]# dnf repolist# 进入到仓库目录 [rootredhat200 ~]# cd /etc/yum.repos.d/ # 编辑仓库文件 [rootredhat200 yum.repos.d]# vim base.repo # 查看仓库…

08.4.grafana自定义图形并直接数据库取值

grafana自定义图形并直接数据库取值 自定义添加油表图形 选择gauge图形,并且配置对应设定值,点击应用 如图所示,可以看到仪表盘上的值是zabbix上取得值 配置grafana直接数据库取值 添加mysql数据源 添加后进行配置,我这…

JS解密之新js加密实战(二)

前言 上次发了一篇关于新加密的,只解了前边两层,这中间家里各种事情因素影响,没有继续进一步研究,今天百忙之中抽空发布第二篇,关于其中的一小段加密片段,我认为分割成多个小片段是更容易被理解的。逻辑相…

如何更好地使用Kafka? - 运行监控篇

要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现&#…

牛客NC363 开锁【中等 BFS Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/e7cbabbf7e0a41ec98055ee5f3d33bbe https://www.lintcode.com/problem/796 思路 Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改&#x…

SpringBoot整合SpringScurity权限控制(菜单权限,按钮权限)以及加上SSH实现安全传输

文章目录 项目地址: 一、md5 与 先进的哈希算法的区别1.1. 安全性问题1.2. 设计目的1.3. 功能特性1.4. 适用性1.5. 总结 二、数据传输安全和数据加密实现:2.1 生成证书:2.2、在springboot中进行集成2.2.1 配置证书:2.2.2. 强制使用…

4.1 编写程序,从键盘接收一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符

方法一: 运行效果: 输入B,输出显示ABC;输入A,输出显示AB 思路: 1、通过键盘输入接收一个字母。 2、将输入的字母减去1,得到前导字符,然后输出。 3、将输入的字母加上1,得…

【js下载文本文件】

功能 使用js下载dom的文本内容 原理 a标签下载功能 代码 <p id"p2">66666666</p><button onclick"downloadInnerHtml(filename2,#p2)">下载</button><script>var filename2 新建文档; //默认文本名字function downloa…

【问题实操】银河高级服务器操作系统实例分享,开机之后反复重启

1.服务器环境以及配置 物理机/虚拟机/云/容器 物理机 外网/私有网络/无网络 私有网络 处理器&#xff1a; PHYTIUM FT2000PLUS 2200 MHz 内存&#xff1a; 128 GiB 整机类型/架构&#xff1a; HIKVISION DS-V BIOS版本&#xff1a; HK 601FBE02HK 网卡&#xff1…

云原生技术解析

云原生的概念 云原生是一种软件架构和部署方法&#xff0c;旨在利用云计算的优势&#xff0c;以更灵活、可扩展和可靠的方式构建和部署应用程序。它主要关注在容器、微服务、自动化和持续交付等方面。 云原生技术是指以云计算作为基础&#xff0c;以平台和工具为依托&#xff0…

【免费】2024年全新超强版本itvboxfast如意版影视APP源码 TV+手机双端后台PHP源码

首先&#xff0c;让我们了解一下ITVBox如意版影视源码的特点和优势。这一源码基于先进的技术和框架开发&#xff0c;具有稳定、高效的性能&#xff0c;能够满足影视网站的各种需求。与此同时&#xff0c;该源码还提供了丰富的功能和模块&#xff0c;包括影视资源管理、会员系统…

rs6(vmp)瑞某,药某局,商某局,专某局,维某网,cookie + 后缀 的分析解析

文章目录 说在前面rs vmp 特征 介绍解决方法算法补环境运行报错 代码联调补环境框架 补环境导出结果导出cookie导出后缀 效果展示 vx lyj_txd qq 1416279170 # 加我备注来意说在前面 免责声明&#xff1a; 本篇文章只做学习讨论&#xff0c;无商务用途&#xff0c; 未对目标…

线下研讨会 技术沙龙|乐鑫芯片与 ESP RainMaker® 为科技初创企业赋能

众多科技初创企业在智能硬件市场迅猛发展的背景下&#xff0c;对不断变化的需求展现出了高度的敏锐性&#xff0c;期望能够快速将其转化为切实的产品方案。然而&#xff0c;面对复杂繁重的软硬件集成任务&#xff0c;这些企业往往容易陷入研发瓶颈、资金短缺以及效率低下等多重…

C++内存管理new/delete和new[ ]/delete[ ]

1.c/c内存分布 首先看一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd";const char* pChar3 "abcd"; //这里不加const会导致…

从 Oracle 到 TiDB,国有大行打造本地生活 APP 新体验

导读 本文介绍了某国有大行推出的本地生活服务类 APP 在数字时代的创新应用实践。该 APP 利用金融科技和互联网平台模式&#xff0c;打造“金融非金融”的线上生态服务平台&#xff0c;满足了用户多样化的生活需求。为应对用户增长和数据量增加带来的挑战&#xff0c;该 APP 决…

【原创】nnUnet V1在win11下的安装与配置

安装之前可以先了解一下论文的主要内容&#xff0c;便于之后网络训练与推理&#xff0c;调试程序。 论文地址&#xff1a;nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation | Nature Methods 也可以从其他博客快速浏览&#xff1a…

计算机网络(网络原理与应用)之高级交换实验------冗余环路与生成树协议

一、实验目的 (1)了解生成树协议的作用&#xff1b; (2)熟悉生成树协议的配置。 二、应用环境 采用生成树协议可以避免环路。 生成树协议的根本目的是将一个存在物理环路的交换网络变成一个没有环路的逻辑树形网络。IEEE802.ID协议通过在交换机上运行一套复杂的算法STA(sp…

JupyterLab OpenCV展示图片

JupyterLab OpenCV展示图片 方式一 注意&#xff1a;此种方式如果在远程服务器上的JupyterLab上运行&#xff0c;可能会出现错误。 import cv2# 读取图片 image cv2.imread(photo/blg.png)# 显示图片 cv2.imshow(image, image)# 等待按键&#xff0c;之后关闭所有窗口 cv2.w…

Deckset for Mac:让演示文稿制作更轻松

还在为繁琐的演示文稿制作而烦恼吗&#xff1f;Deckset for Mac来帮您解决&#xff01;它支持Markdown语言&#xff0c;让您只需专注于内容的创作&#xff0c;无需在排版和设计上耗费过多精力。丰富的主题和布局选项&#xff0c;让您能够轻松打造出专业级的演示文稿。快来体验D…

我的 OpenLiteSpeed 从开始到放弃之经历

昨晚下定决心放弃 OpenLiteSpeed 了&#xff0c;从开始到放弃历时七天。总结下来放弃 OpenLiteSpeed 主要是实在不适合明月当前的需要&#xff0c;用起来不是锦上添花而是个累赘了都&#xff0c;今天明月就给大家总结分享一下这次 OpenLiteSpeed 从开始到放弃的经历。 一、Ngin…