- 博客(25)
- 资源 (2)
- 收藏
- 关注
原创 代理模式(Proxy)
代理模式是一种结构型设计模式,其主要目的是为其他对象提供一种代理,以控制对这些对象的访问。代理对象可以充当原始对象的包装器,将请求转发到原始对象,并且可以在转发请求之前或之后执行一些额外的操作。远程代理:用于在不同地址空间中的两个对象之间通信,将请求发送到远程对象。虚拟代理:用于延迟加载,即在需要时加载资源。保护代理:用于控制对对象的访问权限,例如,只有特定用户才能访问某个对象。缓存代理:用于缓存对象的访问结果,以避免重复执行计算密集型操作。实现代理模式可以使用抽象类和接口来定义代理和原始对象之间的。
2024-04-20 00:12:09 486
原创 外观模式(Facade)
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。属于结构型模式。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
2024-04-20 00:10:36 187
原创 组合模式(Composite)
对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用)由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下客户端希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非常复杂。
2024-04-20 00:06:42 375
原创 组合模式(Composite)
对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用)由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下客户端希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非常复杂。
2024-04-20 00:05:32 310
原创 适配器模式(Adapter)
* 适配器模式**是一种结构型设计模式, 它能将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。他和装饰器模式一样可以动态扩展一些遗留或者不好改动的代码。
2024-04-20 00:03:08 259
原创 桥接模式(Bridge)
该类持有一个对实现角色的引用以维护该对象,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现角色)
2024-04-20 00:02:13 299
原创 建造者模式(builder)
当构建一个复杂对象时,将构建过程与表示分离。使得同样的过程创建不同的对象。生成器与其他创建型模式不同, 生成器不要求产品拥有通用接口。这使得用相同的创建过程生成不同的产品成为可能。生成器方法通常支持方法链 (例如 someBuilder->setValueA(1)->setValueB(2)->create() ),来组成复杂的对象。相比于工厂模式专门用于生产一系列相关对象而言,生成器重点关注如何分步生成复杂对象。这也是我们常用创建模式的最后一节,后续将会带来结构模式的讲解。生成器。
2024-04-20 00:00:34 172
原创 建造者模式(builder)
当构建一个复杂对象时,将构建过程与表示分离。使得同样的过程创建不同的对象。生成器与其他创建型模式不同, 生成器不要求产品拥有通用接口。这使得用相同的创建过程生成不同的产品成为可能。生成器方法通常支持方法链 (例如 someBuilder->setValueA(1)->setValueB(2)->create() ),来组成复杂的对象。相比于工厂模式专门用于生产一系列相关对象而言,生成器重点关注如何分步生成复杂对象。这也是我们常用创建模式的最后一节,后续将会带来结构模式的讲解。生成器。
2024-04-19 23:47:24 101
原创 单例模式(Singleton)
有时候我们在面对通用代码时候,经常会尝试着创建多个示例函数来对一个函数多次赋值,这样会损耗很多的内存空间,这对于代码来说是不利的。而单例模式可以很好的解决这个问题。但是实现一个实用的单例模式来说,这个并不容易。一般采用饿汉式,若对资源十分在意可以采用静态内部类,不建议采用懒汉式及双重检测。
2024-04-19 23:46:30 441
原创 抽象工厂模式(AbstractFactory)
工厂模式不管工厂怎么拆分抽象,都只是针对一类产品,如果需要多种产品,那就需要使用抽象工厂模式。抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。否则继承的这个接口可以什么也不干。<br />!
2024-04-19 23:45:13 78
原创 工厂模式(Factory)
工厂方法模式抽象出了工厂类,并把具体产品对象的创建放到具体工厂类实现。实现了一个工厂生产一类产品,不需要修改工厂类,只需要增加新的具体工厂类即可。每新增一个产品,就需要增加一个对应的产品的具体工厂类。:工厂模式的核心类,会定义一个用于创建指定的具体实例对象的接口。:核心类,提供创建具体产品的接口,由具体工厂类实现。扩展性非常差,新增产品的时候,需要去修改工厂类。:继承于抽象工厂,实现创建对应具体产品对象的方式。:工厂类所创建的对象就是此具体产品实例。:具体工厂所创建的对象,就是此类。
2024-04-19 23:43:13 144
原创 AVFormatext编解码层
文章目录前言FFMPEG解码流程FFMPEG转码流程编解码API详解解码API使用详解编码API使用详解代码示例编码示例解码示例前言AVFormatContext 是一个贯穿始终的数据结构,很多函数都用到它作为参数,是输入输出相关信息的一个容器,本文讲解 AVFormatContext 的编解码层,主要包括三大数据结构:AVStream,AVCodecContex,AVCodec。FFMPEG解码流程得到输入文件 -> 解封格式 -> 得到编码的数据包 -> 解码数据包 -&g
2024-04-19 14:06:06 646
原创 AVFormatContext封装层
AVFormatContext 是一个贯穿始终的数据结构,很多函数都用到它作为参数,是输入输出相关信息的一个容器,本文讲解 AVFormatContext 的封装层,主要包括两大数据结构:AVInputFormat,AVOutputFormat。封装格式(container format)可以看作是编码流(音频流、视频流等)数据的一层外壳,将编码后的数据存储于此封装格式的文件之内。封装又称容器,容器的称法更为形象,所谓容器,就是存放内容的器具,例如饮料是内容,那么装饮料的瓶子就是容器。文件扩展名。
2024-04-19 14:04:24 665
原创 AVFormatContext协议层
AVFormatContext是统领全局的基本结构体。主要用于处理封装和解封装,并可以从设备中采集数据。该结构必须通过avformat_alloc_context函数进行初始化。AVFormatContext包含协议层,封装层,编解码层FFmpeg源码分析:AVFormatContext结构体-CSDN博客本次实战的目的与实战 1 的目的一致,均是分析输入文件的流数量,只不过本次实战重点突出使用我们自定义的 AVIO 来打开文件。
2024-04-19 14:02:41 506
原创 FFMPEG框架结构
用于创建AVFormatContext对象:打开视频输入文件:获取视频文件信息:查找解码器:打开编解码器:从输入文件读取一帧压缩数据:解码一帧视频数据:解码一帧音频数据:关闭解码器:发送待解码的数据包:接收解码后的帧封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。1、: 负责申请一个AVFormatContext结构的内存,并进行简单初始化。2、: 释放该结构里的所有东西以及该结构本身。3、: 关闭解复用器。
2024-04-19 13:57:40 578
原创 2020-12-23
ONVIF之RTP学习作者:Jesse时间:2020/12/18一. RTP数据帧格式及解析1.1 RTP数据帧wireshark截图说明:代码说明for (offset_sync = 0; offset_sync < ret - 5; offset_sync++) { if ((data[offset_sync] == 0x24) // $ = 0x24 && ((data[offset_sync ...
2020-12-23 16:20:42 244
ONVIF2.0协议中文珍藏版
2022-09-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人