当前位置: 首页 > wzjs >正文

网站案例 网站建设北京网络科技有限公司官网

网站案例 网站建设,北京网络科技有限公司官网,网站设计素材网站大全,厦门网站建设咨询文章目录 初步了解享元模式核心概念组成结构适用场景优缺点优点缺点 示例享元模式的例子总结 初步了解享元模式 享元(Flyweight)模式是一种结构型设计模式,旨在通过共享对象来有效地支持大量细粒度的对象。它主要应用于内存有限且对象数量庞…

文章目录

  • 初步了解享元模式
    • 核心概念
    • 组成
    • 结构
    • 适用场景
    • 优缺点
      • 优点
      • 缺点
    • 示例享元模式的例子
    • 总结

初步了解享元模式

享元(Flyweight)模式是一种结构型设计模式,旨在通过共享对象来有效地支持大量细粒度的对象。它主要应用于内存有限且对象数量庞大的场景,能够通过减少内存占用,提升系统的性能。

核心概念

享元模式的核心思想是通过共享对象来减少内存的使用,避免频繁创建和销毁对象。当多个对象具有相同的状态时,享元模式通过共享这些对象的不可变部分(共享的状态)来节省内存。这样做的好处是,大量相似或相同的对象不会重复创建,而是通过共享已有的对象来重用。

组成

  1. Flyweight(享元类):
    享元类用于定义共享对象的状态,并且管理对象的生命周期。享元类通常会将外部状态(变化的部分)与内部状态(共享的部分)进行区分。

  2. FlyweightFactory(享元工厂):
    享元工厂用于管理共享对象的创建和存储。工厂会检查请求的对象是否已经存在,如果存在,则返回该对象;如果不存在,则创建新的共享对象并存储在缓存中。

  3. Intrinsic State(内部状态):
    内部状态是对象在创建时就确定且不会改变的数据。它是共享的部分,对于不同的对象可以复用。内部状态应该是不可变的。

  4. Extrinsic State(外部状态):
    外部状态是那些会在对象使用时改变的部分,并且不适合放在享元类中。外部状态通常会在客户端进行维护并传递给享元对象。

结构

  • Flyweight:提供共享对象的接口,通常会有一个 operation 方法来操作对象。
  • ConcreteFlyweight(具体享元类):实现了享元接口的具体类,并将内部状态存储在对象中。
  • FlyweightFactory:管理享元对象的池,根据外部状态提供对象的共享或创建新对象。
  • Client(客户端):维护外部状态并请求享元对象。

适用场景

  • 大量对象的共享:当系统中有大量相似的对象时(如文本编辑器中多个字符),可以考虑使用享元模式。
  • 内存消耗大:当对象非常占用内存时,通过共享来减少内存的使用。
  • 对象状态可以分为内部状态和外部状态:如果对象的部分状态不需要改变并且可以被共享,享元模式就非常合适。

优缺点

优点

  1. 节省内存:通过共享相同状态的对象,减少了对象的创建次数,从而节省内存。
  2. 提高性能:减少了对象创建和销毁的次数,能够提升系统性能。
  3. 支持大规模对象的共享:能够有效管理大量细粒度的对象,在性能要求较高的场景中具有明显优势。

缺点

  1. 外部状态管理复杂:需要额外的管理来处理外部状态,可能增加客户端的复杂性。
  2. 不可变的内部状态限制:享元对象的内部状态通常是不可变的,这限制了某些场景的灵活性。
  3. 增加代码复杂性:实现享元模式需要创建享元工厂、管理共享对象池等,增加了系统的复杂度。

示例享元模式的例子

以文本编辑器为例,编辑器中有许多字符对象,每个字符都有其相同的字体、大小等属性。假设我们要处理一个包含大量字符的文档,每个字符都是一个对象。如果每个字符都创建一个新的对象,内存消耗会非常大。而使用享元模式,我们可以将相同字体、颜色的字符对象共享,而每个字符的具体位置、大小等可以通过外部状态来管理。

#include <iostream>
#include <unordered_map>// Flyweight接口
class Character {
public:virtual void display(int position) = 0;
};// ConcreteFlyweight: 具体享元
class ConcreteCharacter : public Character {
private:char symbol; // 内部状态,不会改变public:ConcreteCharacter(char symbol) : symbol(symbol) {}void display(int position) override {std::cout << "Character: " << symbol << ", Position: " << position << std::endl;}
};// FlyweightFactory: 享元工厂
class FlyweightFactory {
private:std::unordered_map<char, Character*> characters;public:Character* getCharacter(char symbol) {if (characters.find(symbol) == characters.end()) {characters[symbol] = new ConcreteCharacter(symbol);}return characters[symbol];}~FlyweightFactory() {for (auto& pair : characters) {delete pair.second;}}
};// 客户端
class TextEditor {
private:FlyweightFactory factory;public:void typeText(const std::string& text) {int position = 0;for (char symbol : text) {Character* character = factory.getCharacter(symbol);character->display(position++);}}
};int main() {TextEditor editor;editor.typeText("Hello, Flyweight!");return 0;
}

在这个例子中:

  • ConcreteCharacter 是享元类,包含了字符的内部状态(符号)。
  • FlyweightFactory 管理着享元对象的创建和共享。
  • TextEditor 是客户端,它通过享元工厂获取字符对象,并输出字符及其位置。多个相同的字符将共享同一个 ConcreteCharacter 对象。

总结

享元模式是一种优化内存使用和性能的设计模式,它通过共享对象来减少内存的占用,特别适合于大量相似对象的场景。通过精细管理对象的内部和外部状态,享元模式能够有效降低内存消耗,但它也引入了外部状态管理的复杂性。


文章转载自:

http://8AdS49av.bpxmr.cn
http://MrUC5yCB.bpxmr.cn
http://jKdK3nRi.bpxmr.cn
http://dMA09BUK.bpxmr.cn
http://z2MIAQdi.bpxmr.cn
http://v3eZ5Iph.bpxmr.cn
http://qzHnRChM.bpxmr.cn
http://6kMo8tLq.bpxmr.cn
http://v7ZB70Us.bpxmr.cn
http://AVf1GVU6.bpxmr.cn
http://UUbyyR3F.bpxmr.cn
http://3rprfQ9Z.bpxmr.cn
http://I8JXA7wt.bpxmr.cn
http://bptDMbLE.bpxmr.cn
http://gziEilu5.bpxmr.cn
http://kcFv84Rq.bpxmr.cn
http://uDGNEyX0.bpxmr.cn
http://pLuaR3jl.bpxmr.cn
http://EKVlQJ4w.bpxmr.cn
http://qFTkqZy0.bpxmr.cn
http://npMBvyrf.bpxmr.cn
http://Wlwdcjwp.bpxmr.cn
http://7rhHxd51.bpxmr.cn
http://qG05HyqE.bpxmr.cn
http://rKFVzru3.bpxmr.cn
http://qBFY0UCI.bpxmr.cn
http://xsA3qcQ8.bpxmr.cn
http://6Gjp0mtX.bpxmr.cn
http://tn1hDr3O.bpxmr.cn
http://paTrFflK.bpxmr.cn
http://www.dtcms.com/wzjs/621043.html

相关文章:

  • 成都网站建设的定位长春seo优化企业网络跃升
  • 简约、时尚、高端 网站建设wordpress重置密码邮件
  • 网站怎么加代码厦门人才网个人会员
  • tp5 商城网站开发建设网站的平台
  • 米拓做网站图片在哪里删掉做网站需要会哪些知识
  • 蓝色企业网站手机版织梦模板化妆品行业的网站开发
  • 建设图书馆网站昆明学校网站建设
  • 长春火车站人工电话微信头像logo在线制作
  • 建设一个外贸网站多少钱呢重庆网站建设velpai
  • 拓尔思网站建设公司wordpress微信机器人
  • 提高网站打开速度的7大秘籍wordpress给用户发消息
  • 图片类网站开发需求网站后台登陆密码
  • 雅安市建设网站静态网站开发课程网
  • 专门做电子书的网站软件开发网站能做seo吗
  • 网站制作公司 沈阳西部数码网站正在建设中是什么意思
  • 网站中的搜索功能怎么做wordpress 需要多大数据库
  • 佛山行业网站建设龙华住房和建设局网站官网
  • 山海关建设局网站wordpress入门
  • 嵌入式培训学费郑州网络seo公司
  • 如皋网站制作500强网站设计
  • 手机怎么做网站服务器吗百度搜索引擎网址格式
  • 什么是seo网站优化自媒体平台注册账号下载
  • 北京网站优化 卓立海创网站 友情链接怎么做
  • 网站建设平台怎么做网站效果图设计
  • 手机模板网站模板免费下载网页制作公司印章怎么弄
  • 怎么做视频平台网站吗编写html的软件有哪些
  • 装潢公司企业网站源码上海开办企业一窗通
  • 网站开发的人怎么样公司如何建设一个网站
  • 网站开发包含的项目和分工win7系统优化大师
  • 合肥商务科技学校网站建设北京网站建设工作室哪家好