首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

封装那些事】 缺失封装

缺失封装 没有将实现变化封装在抽象和层次结构中时,将导致这种坏味。 表现形式通常如下: 客户程序与其需要的服务变种紧密耦合,每当需要支持新变种或修改既有变种时,都将影响客户程序。...为什么不能缺失封装? 开闭原则(OCP)指出,类型应对扩展开放,对修改关闭。也就是说应该通过扩展(而不是修改)来改变类型的行为。没有在类型或层次结构中封装实现变化时,便违反了OCP。...缺失封装潜在的原因 未意识到关注点会不断变化 没有预测到关注点可能发生变化,进而没有在设计中正确封装这些关注点。...因为变化点混在了一起,没有分别进行封装。 使用桥接模式进行封装: 使用桥接模式,分别封装这两个关注点的变化。现在要引入新内容类型Data和新加密算法TDES,只需要添加两个新类。

1.2K150
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    封装那些事】 缺失封装

    缺失封装 没有将实现变化封装在抽象和层次结构中时,将导致这种坏味。 表现形式通常如下: 客户程序与其需要的服务变种紧密耦合,每当需要支持新变种或修改既有变种时,都将影响客户程序。...为什么不能缺失封装? 开闭原则(OCP)指出,类型应对扩展开放,对修改关闭。也就是说应该通过扩展(而不是修改)来改变类型的行为。没有在类型或层次结构中封装实现变化时,便违反了OCP。...缺失封装潜在的原因 未意识到关注点会不断变化 没有预测到关注点可能发生变化,进而没有在设计中正确封装这些关注点。...因为变化点混在了一起,没有分别进行封装。 使用桥接模式进行封装: 使用桥接模式,分别封装这两个关注点的变化。现在要引入新内容类型Data和新加密算法TDES,只需要添加两个新类。

    1.2K30

    封装那些事】 未利用封装

    未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象的类型),而不利用出层次结构内已封装的类型变化时,将导致这种坏味。 为什么要利用封装?...我们这里讨论的是:要检查的类型都封装在了层次结构中,但没有利用这一点,即使用显式类型检查,而不依赖于动态多态性。这将导致如下问题: 显式类型检查让客户程序和具体类型紧密耦合,降低了设计的可维护性。...未利用封装潜在的原因 以过程型思维使用面向对象语言 开发时的思维是以代码执行过程为导向,自然而然就会使用if-else语句和switch语句。 未应用面向对象原则 无力将面向对象的概念付诸实践。...示例分析一 根为抽象类DataBuffer的层次结构封装了各种基本数据结构型数组,DataBuffer的子类DataBufferByte、DataBufferUShort、DataBufferInt支持相应的基本数据类型数组...这种情况反映出来的问题就是没有利用封装,已经有了层次结构,却没有予以利用。没有面向接口编程,每个地方面向的都是具体的实现类,每个地方都需要判断实例的类型才可以进行下一步的动作。

    1.3K40

    封装那些事】 未利用封装

    未利用封装 客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象的类型),而不利用出层次结构内已封装的类型变化时,将导致这种坏味。 为什么要利用封装?...我们这里讨论的是:要检查的类型都封装在了层次结构中,但没有利用这一点,即使用显式类型检查,而不依赖于动态多态性。这将导致如下问题: 显式类型检查让客户程序和具体类型紧密耦合,降低了设计的可维护性。...未利用封装潜在的原因 ###以过程型思维使用面向对象语言 开发时的思维是以代码执行过程为导向,自然而然就会使用if-else语句和switch语句。...示例分析一 根为抽象类DataBuffer的层次结构封装了各种基本数据结构型数组,DataBuffer的子类DataBufferByte、DataBufferUShort、DataBufferInt支持相应的基本数据类型数组...这种情况反映出来的问题就是没有利用封装,已经有了层次结构,却没有予以利用。没有面向接口编程,每个地方面向的都是具体的实现类,每个地方都需要判断实例的类型才可以进行下一步的动作。

    1.1K90

    封装那些事】 泄露的封装

    泄露的封装 抽象通过公有接口(方法)暴露或泄露实现细节时,将导致这种坏味。需要注意的是,即使抽象不存在“不充分的封装”坏味,其公有接口也有可能泄露实现细节。 为什么不能泄露封装?...为实现有效封装,必须将抽象的接口(即抽象的内容)和实现(即抽象的方式)分离。为遵循隐藏原则,必须对客户程序隐藏抽象的实现方面。...##泄露的封装的潜在原因 不知道该隐藏哪些东西 开发人员通常会在无意之间泄露实现细节。 使用细粒度接口 类的公有接口直接提供了细粒度的方法,这些细粒度的方法通常会向客户程序暴露不必要的实现细节。...这就是泄露的封装的潜在原因——使用细粒度接口。

    1K150

    封装那些事】 泄露的封装

    泄露的封装 抽象通过公有接口(方法)暴露或泄露实现细节时,将导致这种坏味。需要注意的是,即使抽象不存在“不充分的封装”坏味,其公有接口也有可能泄露实现细节。 为什么不能泄露封装?...为实现有效封装,必须将抽象的接口(即抽象的内容)和实现(即抽象的方式)分离。为遵循隐藏原则,必须对客户程序隐藏抽象的实现方面。...泄露的封装的潜在原因 不知道该隐藏哪些东西 开发人员通常会在无意之间泄露实现细节。 使用细粒度接口 类的公有接口直接提供了细粒度的方法,这些细粒度的方法通常会向客户程序暴露不必要的实现细节。...这就是泄露的封装的潜在原因——使用细粒度接口。

    93020

    数据封装与解封装流程

    而是由下层逐层封装来完成对等层交换数据,这就是我们数据的封装。 而解封装,就是上层需要与下层进行通信,于是逐层解封装至目标层进行通信。...这里的上下层就是指的网络参考模型的层次 上面可能说的有点复杂不易于理解,可以记住下面这句话: 数据发送时,从上至下逐层封装 数据接收时,从下至上逐层解封装 只有拆除外层封装,才能看到内层封装 TCP/IP...五层模型对应每层格式 所遵循的层次 数据封装的流程 封装与解封装流程 1.数据从应用层发出,进入传输层 在传输层会为我们数据打上TCP or UDP头部,里面包含了我们数据的源端口、目的端口,到这层的时候...,我们数据已经被封装成了数据段。...注意,数据的封装、解封装都是逐层进行的,不会出现跃层通信 数据的解封装封装原理一样,只不过顺序进行了颠倒,从物理层的二进制数据流开始逐层解封装直至应用层 小节 本篇了解了我们数据封装与解封装的流程,

    1.6K20

    封装那些事】 不充分的封装

    这准确描绘了封装原则的作用:用户无需知道抽象(汽车)的细节,此外,封装原则还让抽象能够隐藏实现细节的变化。发动机是汽油发动机还是柴油发动机并不会对我们开车造成影响。...封装原则的实现手法 隐藏实现细节 抽象向客户端程序只暴露其提供的功能,而将实现方式隐藏起来。...违反封装原则导致的坏味 我们这篇博客主要讲解分析不充分的封装坏味,对于其它封装坏味将在后面的博客讲解分析。 不充分的封装 对于抽象的一个或多个成员,声明的访问权限超过了实际需求时,将导致这种坏味。...为什么要有充分的封装封装的主要意图是将接口和实现分离,以便能够几乎独立地修改它们。这种关注点分离让客户端程序只依赖于抽象的接口,从而能够对它们隐藏实现细节。...不充分的封装的潜在原因 为方便测试 为了方便测试,开发人员常常将抽象的私有方法改成公有的。由于私有方法涉及抽象的实现细节,将其改为公有将破坏抽象的封装

    1.9K130

    FFmpeg 实现视频 封装 与 解封装

    FFmpeg 封装实现 本例子实现的是将视频数据和音频数据,按照一定的格式封装为特定的容器,比如FLV、MKV、MP4、AVI等等。 实现的过程,可以大致用如下图表示: ?...从图中可以大致看出视频封装的流程: 首先要有编码好的视频、音频数据。 其次要根据想要封装的格式选择特定的封装器。 最后利用封装器进行封装。...封装的大致流程已经完成了,剩余的是一些收尾工作,比如释放分配的内存、结构体等等。...FFMpeg 解封装实现 本例子实现的是将音视频分离,例如将封装格式为 FLV、MKV、MP4、AVI 等封装格式的文件,将音频、视频分离开来。 实现的过程,可以大致用如下图表示: ?...从图中可以看出大致的节封装流程: 首先要对解复用器进行初始化。 其次将输入的封装格式文件给到解复用器内。 最后利用解封装对 Container 进行解封装

    2.6K30

    封装那些事】不充分的封装

    封装原则倡导通过隐藏抽象的实现细节和隐藏变化等来实现关注点分离和信息隐藏。 以汽车为例,我们并不需要了解发动机的原理就可以开车。...这准确描绘了封装原则的作用:用户无需知道抽象(汽车)的细节,此外,封装原则还让抽象能够隐藏实现细节的变化。发动机是汽油发动机还是柴油发动机并不会对我们开车造成影响。 封装原则的实现手法 ?...违反封装原则导致的坏味 ? 我们这篇博客主要讲解分析不充分的封装坏味,对于其它封装坏味将在后面的博客讲解分析。 不充分的封装 对于抽象的一个或多个成员,声明的访问权限超过了实际需求时,将导致这种坏味。...为什么要有充分的封装封装的主要意图是将接口和实现分离,以便能够几乎独立地修改它们。这种关注点分离让客户端程序只依赖于抽象的接口,从而能够对它们隐藏实现细节。...不充分的封装的潜在原因 为方便测试 为了方便测试,开发人员常常将抽象的私有方法改成公有的。由于私有方法涉及抽象的实现细节,将其改为公有将破坏抽象的封装

    85120

    vue项目封装组件_前端组件封装

    前言 在使用vue进行日常开发的时候,组件的封装是一个很常规的操作,也可以从npm仓库下载别人封装好的组件来使用,比如iview,element ui等…但每个项目的应用场景不同,所以我们有时也需要自己封装组件...1.环境准备 因为我们封装的是Vue组件,所以直接在脚手架中封装即可。...,Vue项目就搭建好了 2.组件封装 2.1新建package文件 因为我们可能需要封装多个组件,所以这里创建个package文件夹用于存放组件 然后引入已经封装好的组件测试一下,这里引入的是分页组件...,注意封装好的组件一定要有name且没有重复。...3.组件打包 在上边的步骤中我们已经封装好了组件,接下来就需要将封装完成的组件进行打包,在项目的package.json文件中新增一行命令 “package”: “vue-cli-service build

    1.6K20

    【Java】封装

    本期介绍 本期主要介绍封装 文章目录 1. 封装概述 概述 原则 2. 封装的步骤 3. 封装的操作——private关键字 private的含义 private的使用格式 4. ...封装优化1——this关键字 this的含义 this使用格式 5. 封装优化2——构造方法 构造方法的定义格式 注意事项 6. 标准代码——JavaBean 1. ...封装概述 概述 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直 接操作和修改。...封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据, 必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。...封装优化2——构造方法 当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。

    76040
    领券