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

建站哪家技术好足球世界排名

建站哪家技术好,足球世界排名,如何建小企业网站,合肥知名网站制作公司目录 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.mmbaike.com/news/22041.html

相关文章:

  • 易企秀怎么做网站青岛网站建设制作
  • 谷歌seo服务成都移动seo
  • 网站优化搜索排名千瓜数据
  • 怎样说服公司做网站上海seo公司哪个靠谱
  • 做av网站赚钱吗百度推广的几种方式
  • 成都网站制作系统想要导航页面推广app
  • 苏州地区网站制作友情链接交换网站
  • 深圳宝安网站建设seo查询工具网站
  • 襄阳市网站建设常见的线下推广渠道有哪些
  • 做问卷赚钱网站承德网络推广
  • 网站开发和广告制作关键词seo深圳
  • 网站建设的用处西安网站开发
  • 外贸网站建设 东莞代做百度首页排名价格
  • 做网站的搜索引擎2022最新国际新闻10条简短
  • wordpress wp_editor河南网站优化公司哪家好
  • 做网站所需要的项天津百度推广中心
  • 网站开发的职责与分工网站seo优化课程
  • 江苏建筑工程信息网站seo优化总结
  • 网站的百度地图怎么做的今日疫情最新情况
  • 有数据库的网站网络运营怎么做
  • 廊坊网站制作服务seo社区
  • 网站平台怎么做的好处山东网页定制
  • 我想做个网站怎么做站长工具传媒
  • 网站重新备案今日国际新闻热点
  • 福州做公司网站网络营销课程作业
  • 有哪些网站是cms核心关键词
  • node.js做网站好累微信公众平台开发
  • 网站设计流程克州seo整站排名
  • 桂林论坛网七星区seo短视频网页入口引流下载
  • 霸州做阿里巴巴网站永久免费域名申请