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

怎样做单页销售网站物联网平台网站

怎样做单页销售网站,物联网平台网站,无代码建站软件,wordpress微信采集目录 1、享元模式(Flyweight Pattern)含义 2、享元模式的UML图学习 3、享元模式的应用场景 4、享元模式的优缺点 5、C实现享元模式的简单实例 1、享元模式(Flyweight Pattern)含义 享元模式(Flyweight&#xff09…

目录

1、享元模式(Flyweight Pattern)含义

2、享元模式的UML图学习

3、享元模式的应用场景

4、享元模式的优缺点

5、C++实现享元模式的简单实例


1、享元模式(Flyweight Pattern)含义

享元模式(Flyweight),运用共享技术有效地支持大量细粒度地对象。

(1)享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来最大程度地减少内存使用和提高性能。它适用于存在大量细粒度对象且这些对象之间有许多共享状态的情况。

(2)在享元模式中,将对象分为两种状态:内部状态(Intrinsic State)和外部状态(Extrinsic State)。内部状态是对象固有的、不会随着外部环境变化而变化的状态,可以被多个对象共享;而外部状态是对象依赖的、可能随着外部环境变化而变化的状态,每个对象都需要单独维护。

(3)享元模式的核心思想是将可共享的内部状态从具体对象中提取出来,并将其存储在一个享元池(或缓存)中。当需要创建对象时,先检查享元池中是否已经存在相应的享元对象,如果存在则直接返回,如果不存在则创建新的享元对象并放入享元池中。客户端通过享元工厂来获取或操作享元对象,同时传递外部状态给享元对象进行处理。

2、享元模式的UML图学习

在享元模式中,主要包含以下几个角色:

(1)享元工厂(Flyweight Factory):负责创建和管理享元对象。它维护一个享元池(或缓存),用于存储已经创建的享元对象,并根据客户端的请求返回相应的享元对象。

(2)抽象享元(Flyweight):定义了享元对象的接口,声明了享元对象可以接收的外部状态参数。

(3)具体享元(Concrete Flyweight):实现了抽象享元接口,同时也包含内部状态。具体享元对象需要注意内部状态和外部状态的分离,确保内部状态是可共享的。

(4)UnshareConcreteFlyweight是指那些不需要共享地Flyweight子类。因为Flyweight接口共享成为可能,但它并不强制共享,解决那些不需要共享对象地问题。

(5)客户端(Client):通过享元工厂来获取或操作享元对象。客户端通常会维护一些外部状态,并将其传递给享元对象进行处理。

3、享元模式的应用场景

(1)系统中存在大量相似对象,且创建和销毁这些对象会消耗大量资源时,可以考虑使用享元模式来共享对象。

(2)对象的状态可以分为内部状态和外部状态,且内部状态相对稳定不变,而外部状态可变时,可以使用享元模式来共享内部状态,减少对象的数量。

4、享元模式的优缺点

(1)优点:

1)节省内存:通过共享对象,减少了系统中对象的数量,从而节省了内存空间。特别是当需要创建大量细粒度的对象时,享元模式可以显著减少内存的消耗。

2)提高性能:由于共享对象可以被多个客户端共享,因此可以减少对象的创建和销毁次数,提高了系统的性能。

3)支持可变状态和不可变状态:享元模式将对象的状态分为内部状态和外部状态,其中内部状态是不可变的,而外部状态是可变的。这样可以在一定程度上支持对象的可变性,同时保持了对象的共享性。

(2)缺点:

1)对象共享可能导致线程安全问题:如果多个线程同时访问并修改了共享对象的外部状态,就会出现线程安全问题。在使用享元模式时,需要注意对共享对象的并发访问进行合理的同步控制。

2)增加了系统的复杂性:引入享元模式会增加系统的复杂性,需要额外的工厂类来管理享元对象的创建和共享。这增加了代码的复杂性和维护成本。

总结: 享元模式通过共享对象来减少系统中对象的数量,从而节省了内存空间,并提高了系统的性能。然而,它也增加了系统的复杂性,并可能引入线程安全问题。在使用享元模式时,需要根据具体情况权衡利弊,合理设计和管理共享对象。

5、C++实现享元模式的简单实例


#include <iostream>
#include <unordered_map>// 抽象享元类
class Flyweight 
{
public:virtual void operation(int extrinsicState) = 0;
};// 具体享元类
class ConcreteFlyweight : public Flyweight 
{
public:void operation(int extrinsicState) override {std::cout << "具体享元对象,外部状态:" << extrinsicState << std::endl;}
};// 享元工厂类
class FlyweightFactory 
{
private:std::unordered_map<int, Flyweight*> flyweights;public:Flyweight* getFlyweight(int key){if (flyweights.find(key) == flyweights.end()) {flyweights[key] = new ConcreteFlyweight();}return flyweights[key];}
};int main() 
{FlyweightFactory factory;Flyweight* fw1 = factory.getFlyweight(1);fw1->operation(10);Flyweight* fw2 = factory.getFlyweight(2);fw2->operation(20);Flyweight* fw3 = factory.getFlyweight(1); // 从缓存中获取已有的享元对象fw3->operation(30);delete fw1;delete fw2;// 注意:不要删除fw3,因为它是从享元池中获取的对象,由享元工厂负责管理和销毁return 0;
}

在上述示例中,通过享元工厂(FlyweightFactory)创建和管理享元对象(ConcreteFlyweight)。客户端根据需要获取具体的享元对象,并传递外部状态给享元对象进行操作。

http://www.yayakq.cn/news/538446/

相关文章:

  • 广州网站建设q.479185700強长沙专业建设网站企业
  • 内蒙古建设厅网站首页做网站工资多少钱
  • 什么不属于网站推广软件维纳斯式束腰Wordpress
  • o2o手机网站建设难如何用免费个人网站制作
  • 织梦博客网站模板网络营销是什么等综合因素促成
  • 微信公众号配置 网站建设wordpress主题怎么制作
  • 国外有哪些设计网站视觉传达设计主要学什么
  • 做个网站需要什么地狱少女通信网站怎么做
  • 怎么做百度网盘链接网站万盛集团网站建设
  • 我想做一个网站 不知道找谁做网站开发 兼职项目
  • 湖南长沙做网站南安市网站建设
  • 单县做网站wordpress清楚缓存
  • 四川网站建设设计公司北京网站关键词
  • 屏蔽网站推广html5响应式网页设计
  • 坪地网站建设包括哪些动漫设计和动漫制作技术的区别
  • 高新网站开发1年经验民权平台网站建设
  • 怎么做属于自己的免费网站网页布局设计图片
  • 做网站还需要兼容ie6吗网站完整模板
  • 怎样查询网站备案号管理咨询培训
  • 婚庆设计网站模板网络平台推广
  • 网站开发要考什么证电子商务网站建设与管理 教案
  • 备案 个人网站腾讯微信公众号
  • 深圳做自适应网站制作厂房外墙设计效果图
  • 如何做网站搜索栏设计微信小程序多少钱
  • 淮安做网站的公司济南正规网站制作品牌
  • 推广产品吸引人的句子长春网站优化公司
  • 台州手机网站制作洛阳百事通文化传播有限公司
  • 个人网站设计论文ppt敏感词过滤wordpress
  • 仓储网站开发专业做二手房的网站有哪些
  • 建设网站推销西安做网站企业