深入理解封装的设计思想

news2024/10/6 22:32:50

在这里插入图片描述

相对于OOP三大基本特性其他两个:继承和多态,封装其实我认识是最重要的概念。

对于封装初步在理解的时候就是private 一个variable 然后设置get和set方法,为什么要这样做,有个大概的想法,就是不让其他的对象直接获取数据,修改数据,限制其他类的调用和使用,仅此而已,但这只是封装的体现形式,他有更深层次的含义。

我们考虑3个情况:

1)如果没有对实例变量进行private 修饰,那么多个线程在操作这个对象的时候,就会出现读后写或者写后读的矛盾问题。那么即使是要做线程安全的处理,就需要将整个类进行线程安全,但如果限制使用只能通过set和get方法,那么只需要方法进行线程安全的处理。

2)如果我们自己写出一个Util ,提供给其他程序员使用,创建Util 对象时,内部的两个变量被赋值,且在用户操作方法时需要调用,如果不设置成private,用户就会直接修改这个变量,导致方法调用与预期不同,进而导致调试困难。

3)如果我们自己写一个Util,提供给其他程序员使用,只给外部提供两个方法,但是内部需要若干变量和方法,比如一个算法必须分成三个方法,而我们不希望外界去调用到这些变量和方法就可以将他设置为private

也就是说,我们作为代码的设计者,代码多数情况不只是给我们用的,而是会提供给别人,为了让他们通过固定的方式调用,所以需要封装。

其次封装还代表着我们可以限制给固定的人调用:通过访问修饰符的形式,将方法限制在固定范围内,范围之外人不可调用方法,进一步保证了安全性。

同时作为代码的设计者,我们在向外提供代码让别人使用时,实际开发过程中别人只需要知道,传入什么参数,获得什么结果即可,具体的实现过程可以向外隐藏,如:

在Service 层向外提供服务接口的时候,具体Service实现类中使用的是JDBC还是Mybatis都与调用者无关,换个角度在持久层向上提供服务的时候,我的持久层使用的是什么类型的数据库,调用者也不需要知道。

即:通过封装隐藏实现细节,实现黑盒模型。

其实这本身也是低耦合和高内聚的实现要求即:仅暴露少量的接口给外部和数据操作细节自己完成,不允许外部干涉

综上封装的作用就体现在了:

  1. 安全性

  2. 隐藏实现细节

  3. 统一接口

  4. 便于修改代码

本篇关键词:限制访问,隐藏细节

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

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

相关文章

【图形学】贝塞尔曲线理论与实践

贝塞尔曲线(Bezier Curve)在计算机图形领域应用非常广泛,比如我们 CSS 动画、 Canvas 以及 Photoshop 等都可以看到贝塞尔曲线的身影。 贝塞尔曲线类型 贝塞尔曲线根据_控制点_的数量分为: 一阶贝塞尔曲线(2 个控制点…

首助编辑高手:掌控PDF,工作流程更顺畅!

在繁忙的工作中,我们时常需要处理各种PDF文档。这些文档可能来自客户、同事或自己创建。然而,直接编辑PDF往往不是一件容易的事,需要专业的工具来辅助。今天,我要为大家介绍一款强大的PDF编辑工具——首助编辑高手,它将…

夏季使用打包机需要注意些什么

夏季由于非常炎热的特点,很多设备的使用都需要非常关注它的使用安全,打包机也不例外,尤其是24小时生产的企业,对于设备的使用注意事项更应该多加注意,那么夏季使用打包机到底该注意些什么呢?艾讯认为至少应…

01 Redis的特性+下载安装启动

1.1 NoSQL NoSQL(“non-relational”, “Not Only SQL”),泛指非关系型的数据库。 键值存储数据库 : 就像 Map 一样的 key-value 对。如Redis文档数据库 : NoSQL 与关系型数据的结合,最像关系…

eNSP 实验 两台AR配置同网段

实验1:eNSP 两台AR配置同网段 目的:创建两台AR,配置IP互相ping通 拓扑结构: 首先创建一个AR3260 然后创建一个AR2220 然后同轴电缆连接一下 先配置AR2220。 1、切管理员:system-view 进入千兆位以太网 0/0/0 interf…

如何抓住短剧“狂飙”风口?腾讯微搭发布一站式短剧平台解决方案

“制作成本50万,充值流水一个亿。” “7天写完剧本,一周拍完一部剧。” 短剧热度不断提升,情节快节奏、单集时长短、竖屏呈现等特点更迎合现代社会快节奏下的碎片化观看需求。2023年以来,小程序短剧高速发展,数据显示…

electron-builder vue 打包后element-ui字体图标不显示问题

当使用electron打包完成的时候,启动项目发现使用的element-ui字体图标没显示都变成了小方块,并出现报错,请看下图: 解放方法: 在vue.config.js中设置 customFileProtocol字段:pluginOptions: {electronBui…

Vulnhub靶场MATRIX-BREAKOUT: 2 MORPHEUS

攻击机192.168.223.128 目标机192.168.223.140 主机发现nmap -sP 192.168.223.0/24 端口扫描nmap -p- 192.168.223.140 开启了 22,80,81三个端口 看一下web界面 是inguardians 写给jaybeale的信,说计算机被密码锁住了,至少…

【创建vue项目的两种方式】

Vue环境搭建 NodeJs安装包安装淘宝镜像 环境搭建webpack安装全局安装vue/cli查看模板创建项目1.webpack2. vue-cli NodeJs安装包 下载链接:官网链接 下载下来后,直接傻瓜式的安装即可。 通过在cmd控制台输入以下命令查看是否安装成功 node -v因为适配某…

云计算项目六:升级网站运行平台|部署缓存服务|数据迁移|部署集群

升级网站运行平台|部署缓存服务|数据迁移|部署集群 案例1:升级网站运行平台步骤一:清除当前配置步骤二:部署LNMP步骤三:测试配置 案例2:部署内存存储服务步骤一:部署redi…

Linux基础指令【下篇】

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1.时间指令----date1…

翻译: 使用 GPT-4 将您的 Streamlit 应用程序提升到一个新的水平一

帮助您更快地设计、调试和优化 Streamlit 应用的专业技巧 设计和扩展 Streamlit 应用程序可能是一项艰巨的任务!作为开发人员,我们经常面临一些挑战,例如设计良好的 UI、快速调试我们的应用程序以及快速制作它们。 如果有一个工具可以加快速…

【GitHub项目推荐--不错的Flutter项目】【转载】

01 可定制的图表库 FL Chart是一个高度可定制的 Flutter 图表库,支持折线图、条形图、饼图、散点图和雷达图 。 项目地址:https://github.com/imaNNeoFighT/fl_chart LineChart BarChart PieChart Sample1 Sample2 Sample3 …

linux 查看系统日记

一 关于 journalctl 简介: 在window想查看日记通常是通过事件查看器,在linux则可以通过journalctl -xe,journalctl是 Systemd 日志管理工具的一部分,用于检索和显示系统日志。 二 使用journalctl 查看日记: journalct…

关于axios给后端发送数据的问题

这里需要用的插件:qs.js,是前端给后端发送的数组,需要序列化所以要用到这个插件,这里就提取连接在这里,需要的自提,需要导如进来,别忘记了 链接:https://pan.baidu.com/s/1qyD8v9wfd…

JMeter:性能测试和压力测试工具详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,薪资嘎嘎涨 JMeter简介 JMeter时Apache下基于java的一款性能测试…

antdesignvue中使用VNode写法

1、使用场景 如图:消息提示框中,将数据中的数据单独一行显示 2、代码 let errorList res.result; //后端返回的数据例: ["1. 数据格式不正确","2. 数据已存在"]if(errorList&&errorList.length!0){this.$notif…

时限挑战 —— 深度解析Pytest插件 pytest-timeout!

在软件开发中,测试用例的执行时间通常是一个关键考虑因素。Pytest插件 pytest-timeout 提供了一个强大的插件,允许你设置测试用例的超时时间。本文将深入介绍 pytest-timeout 插件的基本用法和实际案例,助你精确掌控测试用例的执行时限。 什么…

备忘录模式-C#实现

该实例基于WPF实现,直接上代码,下面为三层架构的代码。 目录 一 Model 二 View 三 ViewModel 一 Model using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 设计模式练…

JVM篇----第八篇

系列文章目录 文章目录 系列文章目录前言一、标记清除算法( Mark-Sweep)二、复制算法(copying)三、标记整理算法(Mark-Compact)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分…