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

文章目录

  • 定义
    • 理解
  • 小结

定义

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

理解

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

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

小结

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

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

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

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

相关文章

我和爬虫的故事

文章目录 爬虫简介个人经历未来总结 爬虫简介 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外…

Gone框架介绍16 - 自动生成Priest

我从头到尾实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能;自己觉得还挺好用的,并且打算长期维护! github地址:https://github.com/gone-io/gone 文档原地址:https:/…

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加密实战(二)

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

Python生成器使用场景2 - 处理无限队列 - 节省cpu 资源

什么是无限队列? 例如常见的斐波那契数列, 自然数队列等 这次我们用素数队列来举个例子 普通方法求素数 首先我用普通的方法编写1个 generate_prime_numbers(n) 的函数, return 1个包含前n个素数的list def generate_prime_numbers(num10)…

如何更好地使用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…

C语言和BASH SHELL中条件表达式的真假与0和1的关系

在C语言中,条件表达式的真假与0和1的关系是非常简单的: 真值:如果条件表达式的结果为非零值,则条件被视为真。假值:如果条件表达式的结果为零值,则条件被视为假。 因此,在C语言中,…

ASP.NET之图像控件

在ASP.NET中,用于显示图像的控件主要是Image控件,Image控件属于ASP.NET Web Forms的一部分,它允许你在Web页面上显示图像。以下是如何在ASP.NET Web Forms中使用 1. 添加Image控件到页面 在ASP.NET Web Forms页面上,你可以通过设…

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. 强制使用…

山东大学机器人实验 matlab部分

山东大学机器人实验 matlab部分 最新更新在Github Github地址吐槽Matlab在Ubuntu里是真的难用感觉Ubuntu配置Matlab的一些问题

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

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

基础统计概念

这是一个非常适合初学者的选题,因为理解基础统计概念是学习统计学的第一步。下面我会简要解释这些概念: 1. **均值(Mean):** 在一组数据中,所有数值的总和除以数据的个数。均值是描述数据集中心位置的一种…

Kafka 环境配置与使用总结

# 部署教程参考 # 官方教程: https://kafka.apache.org/quickstart # 单机部署kafka参考: https://blog.csdn.net/u013416034/article/details/123875299 # 集群部署kafka参考: # https://blog.csdn.net/zhangzjx/article/details/123679453 # https://www.cnblogs.com/And…

社群知识付费系统,如何向家长推销课程话术?有什么方法?

很多培训机构都会遇到和家长谈了很久,但是家长就是不签单的情况,其实销售过程就是“逼单”,要掌握技巧,那像家长推销课程有什么话术? ①盲目型家长 特点:对课程一无所知,目的性比较差&#xff0…

【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;包括影视资源管理、会员系统…