网站建设 质量标准成都网站建设公司哪家专业

news/2025/9/24 6:06:33/文章来源:
网站建设 质量标准,成都网站建设公司哪家专业,四川建筑培训网,免费缩短网址系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦#xff01;#xff01;#xff01; 现在的一切都是为将来的梦想编织翅膀#xff0c;让梦想在现实中展翅高飞。 Now everythi…系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦 现在的一切都是为将来的梦想编织翅膀让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 结构型设计模式之亨元模式 系列文章目录一、亨元模式介绍二、亨元模式优缺点2.1 优点2.2 缺点 三、亨元模式使用场景四、亨元模式实现五、总结 一、亨元模式介绍 亨元模式不知道为啥起这么奇怪的名字 简单的理解: 一个类的成员非常多创建此对象很消耗资源在实际场景中又需要反复创建和销毁该对象。所消耗的内存就更加庞大。 如果此时设计一个对象池里面缓存一定的对象软件在用时申请不用时回收。就能实现对象的重复利用而多次创建和销毁对象。 什么是享元模式 说到享元模式第一个想到的应该就是池技术了String常量池、数据库连接池、缓冲池等等都是享元模式的应用所以说享元模式是池技术的重要实现方式。 比如我们每次创建字符串对象时都需要创建一个新的字符串对象的话内存开销会很大所以如果第一次创建了字符串对象“adam“下次再创建相同的字符串”adam“时只是把它的引用指向”adam“这样就实现了”adam“字符串再内存中的共享。 举个最简单的例子网络联机下棋的时候一台服务器连接了多个客户端玩家如果我们每个棋子都要创建对象那一盘棋可能就有上百个对象产生玩家多点的话因为内存空间有限一台服务器就难以支持了所以这里要使用享元模式将棋子对象减少到几个实例。 ⚠️ 意图 运用共享技术有效地支持大量细粒度的对象。 ⚠️ 主要解决 在有大量对象时有可能会造成内存溢出我们把其中共同的部分抽象出来如果有相同的业务请求直接返回在内存中已有的对象避免重新创建。。 ⚠️ 何时使用 1、系统中有大量对象。 2、这些对象消耗大量内存。 3、这些对象的状态大部分可以外部化。 4、这些对象可以按照内蕴状态分为很多组当把外蕴对象从对象中剔除出来时每一组对象都可以用一个对象来代替。 5、系统不依赖于这些对象身份这些对象是不可分辨的。 ⚠️ 如何解决 用唯一标识码判断如果在内存中有则返回这个唯一标识码所标识的对象。 图1_1 亨元模式类图 因为要求细粒度对象所以不可避免地会使对象数量多且性质相近此时我们就将这些对象的信息分为两个部分内部状态和外部状态。 内部状态指对象共享出来的信息存储在享元对象内部并且不会随环境的改变而改变 外部状态指对象得以依赖的一个标记是随环境改变而改变的、不可共享的状态。 二、亨元模式优缺点 2.1 优点 大大减少了对象的创建降低了程序内存的占用提高效率 享元模式的优点在于它可以极大减少内存中对象的数量使得相同对象或相似对象在内存中只保存一份。享元模式的外部状态相对独立而且不会影响其内部状态从而使得享元对象可以在不同的环境中被共享。 2.2 缺点 提高了系统的复杂度。需要分离出内部状态和外部状态而外部状态具有固化特性不应该随着内部状态的改变而改变 享元模式使得系统更加复杂需要分离出内部状态和外部状态这使得程序的逻辑复杂化。为了使对象可以共享享元模式需要将享元对象的状态外部化而读取外部状态使得运行时间变长。 享元模式可以避免大量非常相似类的开销。在程序设计中有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的有时就能够大幅度的减少需要实例化的类的数量。如果能把那些参数移到类实例的外面在方法调用时将它们传递进来就可以通过共享大幅度地减少单个实例的数目。 也就是说享元模式Flyweight执行时所需的状态是有内部的也可能有外部的内部状态存储于ConcreteFlyweight对象之中而外部对象则应该考虑由客户端对象存储或计算当调用Flyweight对象的操作时将该状态传递给它。 三、亨元模式使用场景 系统中存在大量相似对象需要缓冲池的场景 注意事项 注意划分内部状态和外部状态否则可能会引起线程安全问题 这些类必须有一个工厂类加以控制。 四、亨元模式实现 Flyweight抽象类 所有具体享元类的超类或接口通过这个接口Flyweight可以接受并作用于外部状态。 #ifndef FLYWEIGHT_FLYWEIGHT_H #define FLYWEIGHT_FLYWEIGHT_H#include iostream #include string #include utilityusing namespace std; class Flyweight { public:explicit Flyweight(string extrinsic) {extrinsic_ std::move(extrinsic);}virtual ~Flyweight() default;//定义业务操作virtual void operate(int extrinsic) 0;string getIntrinsic() const {return intrinsic_;}void setIntrinsic(string intrinsic) {intrinsic_ std::move(intrinsic);}public:string intrinsic_; //内部状态 protected://要求享元角色必须接受外部状态string extrinsic_;//外部状态};#endif //FLYWEIGHT_FLYWEIGHT_HConcreteFlyweight类 继承Flyweight超类或实现Flyweight接口并为其内部状态增加存储空间。 #ifndef FLYWEIGHT_CONCRETEFLYWEIGHT_H #define FLYWEIGHT_CONCRETEFLYWEIGHT_H#include Flyweight.hclass ConcreteFlyweight : public Flyweight{//接受外部状态 public:explicit ConcreteFlyweight(string extrinsic) : Flyweight(std::move(extrinsic)) {}~ ConcreteFlyweight() default;//根据外部状态进行逻辑处理void operate(int extrinsic) override {cout 具体Flyweight: extrinsic endl;} };#endif //FLYWEIGHT_CONCRETEFLYWEIGHT_HUnsharedConcreteFlyweight类 指那些不需要共享的Flyweight子类。 #ifndef FLYWEIGHT_UNSHAREDCONCRETEFLYWEIGHT_H #define FLYWEIGHT_UNSHAREDCONCRETEFLYWEIGHT_H#include Flyweight.hclass UnsharedConcreteFlyweight : public Flyweight{ public:explicit UnsharedConcreteFlyweight(string extrinsic) : Flyweight(std::move(extrinsic)) {}~UnsharedConcreteFlyweight() default;//根据外部状态进行逻辑处理void operate(int extrinsic) override {cout 不共享的具体Flyweight: extrinsic endl;} };#endif //FLYWEIGHT_UNSHAREDCONCRETEFLYWEIGHT_HFlyweightFactory类 一个享元工厂用来创建并管理Flyweight对象主要是用来确保合理地共享Flyweight当用户请求一个Flyweight时FlyweightFactory对象提供一个已创建的实例或创建一个实例。 #include Flyweight.h #include ConcreteFlyweight.h #include map #include memoryusing namespace std;class FlyweightFactory { public:FlyweightFactory() default;~FlyweightFactory() default;//享元工厂 public:shared_ptrFlyweight GetFlyweight(string extrinsic) {cout extrinsic endl;shared_ptrFlyweight flyweightPtr nullptr;auto a pool_.find(extrinsic);if(pool_.find(extrinsic) ! pool_.end()) { //池中有该对象flyweightPtr pool_.at(extrinsic);cout 已有 extrinsic 直接从池中取---- endl;} else {//根据外部状态创建享元对象flyweightPtr make_sharedConcreteFlyweight(extrinsic);//放入池中pool_.emplace(extrinsic, flyweightPtr);cout 创建 extrinsic 并从池中取出---- endl;}return flyweightPtr;}//定义一个池容器 private:mapstring, shared_ptrFlyweight pool_; };#endif //FLYWEIGHT_FLYWEIGHTFACTORY_HClient客户端 #include iostream #include Flyweight.h #include FlyweightFactory.h #include UnsharedConcreteFlyweight.husing namespace std; int main() {int extrinsic 22;FlyweightFactory factory;shared_ptrFlyweight flyweightX factory.GetFlyweight(X);flyweightX-operate(extrinsic);shared_ptrFlyweight flyweightY factory.GetFlyweight(Y);flyweightY-operate(extrinsic);shared_ptrFlyweight flyweightZ factory.GetFlyweight(Z);flyweightZ-operate(extrinsic);shared_ptrFlyweight flyweightReX factory.GetFlyweight(X);flyweightReX-operate(extrinsic);shared_ptrUnsharedConcreteFlyweight unsharedFlyweight make_sharedUnsharedConcreteFlyweight(X) ;unsharedFlyweight-operate(extrinsic);return 0; }运行结果如下 图1_2 运行结果 从这个结果我们可以看出来第一次创建X、Y、Z时都是先创建再从池中取出而第二次创建X时因为池中已经存在了所以直接从池中取出这就是享元模式。 五、总结 与其他相关模式 客户端要引用享元对象是通过工厂对象创建或者获得的客户端每次引用一个享元对象都是可以通过同一个工厂对象来引用所需要的享元对象。因此可以将享元工厂设计成单例模式这样就可以保证客户端只引用一个工厂实例。因为所有的享元对象都是由一个工厂对象统一管理的所以在客户端没有必要引用多个工厂对象。不管是单纯享元模式还是复合享元模式中的享元工厂角色都可以设计成为单例模式对于结果是不会有任何影响的。 Composite模式Flyweight模式通常和Composite 模式结合起来用共享叶结点的有向无环图实现一个逻辑上的层次结构。复合享元模式实际上是单纯享元模式与合成模式的组合。单纯享元对象可以作为树叶对象来讲是可以共享的而复合享元对象可以作为树枝对象 因此在复合享元角色中可以添加聚集管理方法。通常最好用Flyweight实现State 和Strategy 对象。 小结 享元模式是一个考虑系统性能的设计模式通过使用享元模式可以节约内存空间提高系统的性能。享元模式的核心在于享元工厂类享元工厂类的作用在于提供一个用于存储享元对象的享元池用户需要对象时首先从享元池中获取如果享 元池中不存在则创 建一个新的享元对象返回给用户并在享元池中保存该新增对象。享元模式以共享的方式高效地支持大量的细粒度对象享元对象能做到共享的关键是区分内部状态(Internal State)和外部状态(External State)。 (1) 内部状态是存储在享元对象内部并且不会随环境改变而改变的状态因此内部状态可以共享。 (2) 外部状态是随环境改变而改变的、不可以共享的状态。享元对象的外部状态必须由客户端保存并在享元对象被创建之后在需要使用的时候 再传入到享元对 象内部。一个外部状态与另一个外部状态之间是相互独立的。

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

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

相关文章

域名备案关闭网站wordpress采集淘宝商品

技术:springbootmysqlvue 一、背景 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统同城上门喂遛宠物…

国内做新闻比较好的网站有哪些网站建设的作用和意义

一、tslib介绍 tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库,并且是开源。 tslib 为触摸屏驱动和应用层之间的适配层,它把应用程序中读取触摸屏 struct input_event 类型数据(这是输入设备上报给应用层的原始数据)并进行…

企业展示网站 价钱网站手机端打不开

目录 修改约束 创建数据库 添加约束 删除约束 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 修改约束 如果说表结构的修改还在可以容忍的范畴之内,那么约束的修改是绝对 100% 禁止的 所有的约束一定要在…

国内p2p网站建设大兴模版网站开发公司哪家好

SVN 一、SVN简介1. 概念1.1 repository(源代码库)1.2 Checkout(提取)1.3 Commit(提交)1.4 Update (更新) 2. SVN的主要功能2.1 目录版本控制2.2 真实的版本历史2.3 自动提交2.4 纳入版本控管的元数据2.5 选…

网站模板的制作怎么做小程序开发步骤大全

朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中的第141道单链表OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏:数据结构与算法 个 …

吴忠市建设局官方网站做网站开发能挣钱

前言 这里是【使用Python编写游戏辅助工具】的第三篇:鼠标连击器的实现。本文主要介绍使用Python来实现鼠标连击功能。 鼠标连击是指在很短的时间内多次点击鼠标按钮,通常是鼠标左键。当触发鼠标连击时,鼠标按钮会迅速按下和释放多次&#xf…

网站搭建和网站开发免费咨询医生在线男科

源码说明后台号码admin后台密码123456声明:该源码仅供学习出现,修复者不承担任何责任,下载安装即代表使用者自行承担责任源码安装方法需要服务器开启g11插件PHP5.6,主机用户推荐95云主机,因为已经开启所有扩展插件必须…

智能自助建站系统源码电子 东莞网站建设

一、安装python并配置环境变量 1、打开python官网,下载并安装 Welcome to Python.org 下载 寻找版本:推荐使用3.9版本,或其他表中显示为安全(security)的版本 安装:(略) 2、配置环…

柳州建设网官方网站最优惠的手机网站建设

发布时间:2023-7-20 主要更新内容: 1.增加3D地图功能 2.增加水球图 3.增加扇形图,在数据大屏 - 自定义组件中定义。 4.增加指标引导线功能,在数据大屏 - 自定义组件中定义。 5.详情页增加回调函数功能。 6.大屏/仪表盘模版下载,…

tiktok跨境电商怎么做锦州网站seo

目录标题 前言1、理论知识2、串口下载具体操作2.1、硬件准备2.2、软件准备2.3、设置单片机的启动模式为系统存储器启动2.4、软件配置2.5、下载程序 附:生成hex文件 前言 使用调试器下载程序又快有稳定还能使用调试功能,当然是下载调试的首选。但是拓展下串口下载程…

如何建设个人网站和博客网站建设行业知乎

目录 前言 一、REDIS概述 二、REDIS安装 1、编译安装 2.yum安装 三、Redis的目录结构 四、基础命令解析 五、在一台服务器上启动多个redis 六、数据库的基本操作 (一)登录数据库 (二)基础命令 七、Redis持久化 (一&…

网站如何做传输网盘网站面包屑怎么做

NO.1 Java.alng.NullPointerException这个异常大家肯定都经常遇到,异常的解释是 “程序遇上了空指针 “,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图…

在线营销单页网站制作微信公众号小程序助手

linux 改java堆内存大小[2021-02-08 23:06:29] 简介:linux查内存大小的方法:首先打开应用程序;然后选择系统工具选项,并单击系统终端选项;接着在系统终端命令行输入【free -h】命令;最后在结果中找到total即可查看到系…

齐齐哈尔北京网站建设怎么做网页推广

随着科技的不断发展,VR技术已经成为当今市场上较为热门的新型技术之一了,而VR会议远程带看功能,更是为用户提供更加真实、自然的沉浸式体验。 随着5G技术的发展,传统的图文、视频这种展示形式已经无法满足消费者对信息真实性的需求…

青海省住建局和建设厅门户网站房地产楼盘微信网站建设营销方案

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者:苏剑林(来自追一科技,人称“苏神”)前言需要许多时间步计算的循环神经网络,如LSTM、GRU,往往存在梯度爆炸的问题。其目标函数可能存在悬崖一样斜率较大的区域&…

大型网站 前端汤阴有没有做网站的公司

今天ChatGPT Plus版本做了升级。GPT-4增强了记忆功能,能够通过你的多次对话了解你的意图,并提供合适的回应,总结一句话就是:更加懂你! ChatGPT到底能干什么?我简单总结一下: 翻译:中…

技术支持 东莞网站建设母婴护理河南建筑工程信息

我在过去的几篇文章中都引用了方便的JDK工具jcmd ,但是像我以前对jps所做的那样,仅专注于其实用性 。 jcmd工具是随Oracle Java 7引入的,在通过使用Java标识Java进程的ID (与jps相似),获取堆转储 &#xff…

建设网站公司简介mir设计公司官网

安科瑞 华楠 摘要:目前,随着我国社会经济的快速发展,我国的各个领域都取得了突破性的发展,尤其是在电动汽车充电桩的设计方法,新型的电动汽车充电桩设计已经广泛的受到了人民群众的青睐与认可,而这种发展前…

青岛电子商务网站建设前端外包网站

背景重新组网,需要对现有MongoDB分片集群服务器的IP进行更改,因此也需要对MongoDB分片集群的IP也进行相应的更新,而MongoDB分片集群的IP修改不能单纯的通过配置来进行,需要一番折腾后才能正常更新,这里对整个MongoDB集…

建设网站的项目策划书住建部网站村镇建设管理平台

一、不可变数据的概念 不可变数据意味着数据一旦创建,就不能被更改。在React中,每次对数据的修改都会返回一个新的数据副本,而不会改变原始数据。这种方式确保了数据的稳定性和一致性。 二、Props中的不可变数据 在React中,组件…