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

家居网站应该怎么做今天热点新闻

家居网站应该怎么做,今天热点新闻,造价咨询公司加盟分公司,java做视频网站的需求一,享元模式简介 享元模式是一种结构型设计模式,它将每个对象中各自保存一份数据的方式改为多个对象共享同一份数据,该模式可以有效减少应用程序的内存占用。 享元模式的核心思想是共享和复用,通过设置共享资源来避免创建过多的实…

一,享元模式简介

享元模式是一种结构型设计模式,它将每个对象中各自保存一份数据的方式改为多个对象共享同一份数据,该模式可以有效减少应用程序的内存占用。
享元模式的核心思想是共享和复用,通过设置共享资源来避免创建过多的实例。
当应用程序的内部包含大量的对象,且对象之间包含相似的数据或状态时,可以使用享元模式来共享这些数据或状态。
享元模式的内部涉及到工厂模式的使用,因为它需要创建一个享元工厂来管理共享资源池。这个共享资源池,又称为享元池(Flyweight Pool),这里面包含多个访问共享数据的享元对象。当客户端需要使用一个享元对象时,享元工厂会从池中获取一个已有的享元对象,如果对象不存在,则创建一个新的享元对象。

二,享元模式的结构

1.内部状态(Intrinsic State):对象之间容易重复的、可以共享的、且变动很少的成员变量,该变量在享元模式中被共享。
2.外部状态(Extrinsic State):对象之间各不相同的、不能共享的、且随着不同场景而变化的成员变量,该变量被调用的客户端所设置和更改。
3.享元工厂类(Flyweight Factory):替外部客户端管理共享资源的类。
4.抽象享元类(Flyweight):享元模式的核心,由享元工厂进行创建和管理,里面包含了内部状态,但不包含外部状态。
5.共享的具体享元类(Concrete Flyweight):实现了Flyweight声明的接口并访问和存储了内部状态。
对应UML类图:

代码实现:

#include <iostream>
#include <memory>
#include<unordered_map>using namespace std;class Flyweight {
protected:int id; //内部状态public:Flyweight(int id) : id(id) {}virtual void operation() const = 0;
};class ConcreteFlyweightA : public Flyweight {
public:ConcreteFlyweightA() : Flyweight(1) {}void operation() const override {cout << "Concrete Flyweight A, id: " << id << endl;}
};class ConcreteFlyweightB : public Flyweight {
public:ConcreteFlyweightB() : Flyweight(2) {}void operation() const override {cout << "Concrete Flyweight B, id: " << id << endl;}
};// 定义享元工厂
class FlyweightFactory {
private:std::unordered_map<int, shared_ptr<Flyweight>> flyweights;public:FlyweightFactory() {}//返回享元对象std::shared_ptr<Flyweight> getConcreteFlyweight(int id) {if (flyweights.find(id) == flyweights.end()) {if (id % 2 == 0) {flyweights[id] = make_shared<ConcreteFlyweightA>();}else {flyweights[id] = make_shared<ConcreteFlyweightB>();}}return flyweights[id];}
};int main() {FlyweightFactory factory;shared_ptr<Flyweight> f1 = factory.getConcreteFlyweight(1);shared_ptr<Flyweight> f2 = factory.getConcreteFlyweight(2);shared_ptr<Flyweight> f3 = factory.getConcreteFlyweight(3);f1->operation();f2->operation();f3->operation();return 0;
}

运行结果:

Concrete Flyweight B, id: 2
Concrete Flyweight A, id: 1
Concrete Flyweight B, id: 2

三,享元模式的工作步骤

1.拆分类的成员变量,将成员变量拆分成以下两种:不变的、可能在对象之间重复使用的。变化的、随着应用场景而改动的。
2.将不变的,可重复的成员变量的属性设置为不可修改,并在构造函数中赋初始值。
3.创建享元类,并将共享的成员变量集成到享元类。
4.创建享元工厂类来管理共享的资源池,客户端与享元对象的交互借助享元工厂来实现。
5.优化共享资源池的代码实现,这可能涉及到事件驱动、回调函数或者策略模式的应用。

四,享元模式的应用场景

图形或图像处理:在大型游戏或图形编辑器开发中,同一个形状(如矩形)或颜色等状态会重复出现很多次,基于享元模式可以降低内存开销。
数据库处理优化:数据库被频繁地连接和请求时,享元模式可以管理这些连接并复用它们,提高处理的性能。
UI组件开发:在用户界面中,当创建多个界面窗口时,像按钮、图标等小部件会在创建界面窗口时有大量重复,使用享元模式可以减少界面之间重复组件的数量,提高性能。

五,享元模式的优缺点

享元模式的优点:
1.增加了系统资源的可重用性,节省了系统资源。
2.基于共享的结构,降低了内存消耗。
3.系统可扩展性强,新增对象时可直接复用共享资源。
4.降低了对象内部的结构复杂性。
享元模式的缺点:
1.使代码结构更加复杂。
2.当需要被共享的资源量级很小时,该模式的性能提升并不显著。
3.将共享变量放在构造函数中进行赋值,额外增加了初始化的时间。
4.引入了"共享"这种结构,会导致潜在的线程安全问题。
5.编写代码需要考虑保证状态的同步和一致性问题,否则会导致bug的产生。

六,代码实战

Demo:模拟字符编辑器
#include <iostream>
#include <map>using namespace std;//Flyweight
class Character {
public:Character(char symbol) : symbol_(symbol) {}Character() = default;void print() const {cout << "Character: " << symbol_ << endl;}private:char symbol_;
};//Flyweight factory
class CharacterFactory {
public:static const Character& getCharacter(char symbol) {if (characters_.find(symbol) == characters_.end()) {characters_[symbol] = Character(symbol);cout << "Create new char." << endl;}return characters_[symbol];}private:static map<char, Character> characters_;
};map<char, Character> CharacterFactory::characters_;int main() {const Character& A = CharacterFactory::getCharacter('A');const Character& B = CharacterFactory::getCharacter('B');//Reusing 'A'const Character& A2 = CharacterFactory::getCharacter('A');A.print();B.print();A2.print();return 0;
}

运行结果:

Create new char.
Create new char.
Character: A
Character: B
Character: A

七,参考阅读

https://softwarepatterns.com/cpp/flyweight-software-pattern-cpp-example
https://www.pentalog.com/blog/design-patterns/flyweight-design-patterns/
https://design-patterns.readthedocs.io/zh-cn/latest/structural_patterns/flyweight.html

文章转载自:
http://unyieldingness.brjq.cn
http://overhear.brjq.cn
http://mellifluence.brjq.cn
http://mastectomy.brjq.cn
http://contravention.brjq.cn
http://astrometeorology.brjq.cn
http://spendable.brjq.cn
http://devocalize.brjq.cn
http://irenical.brjq.cn
http://frizzle.brjq.cn
http://ncte.brjq.cn
http://patronym.brjq.cn
http://microsection.brjq.cn
http://fibrogenesis.brjq.cn
http://dragnet.brjq.cn
http://mondain.brjq.cn
http://neural.brjq.cn
http://disconnected.brjq.cn
http://jameson.brjq.cn
http://obviate.brjq.cn
http://memsahib.brjq.cn
http://knockdown.brjq.cn
http://diaphony.brjq.cn
http://oligomer.brjq.cn
http://sakti.brjq.cn
http://cinchona.brjq.cn
http://outargue.brjq.cn
http://calaboose.brjq.cn
http://denticulate.brjq.cn
http://sparsity.brjq.cn
http://thanatism.brjq.cn
http://liebfraumilch.brjq.cn
http://breakup.brjq.cn
http://dictum.brjq.cn
http://ultraminiaturize.brjq.cn
http://hippiatrics.brjq.cn
http://sockdolager.brjq.cn
http://asprawl.brjq.cn
http://clairaudience.brjq.cn
http://chalone.brjq.cn
http://indraught.brjq.cn
http://semivolcanic.brjq.cn
http://avidity.brjq.cn
http://occasionality.brjq.cn
http://caulocaline.brjq.cn
http://pervasion.brjq.cn
http://predetermine.brjq.cn
http://psychodrama.brjq.cn
http://formularize.brjq.cn
http://bushing.brjq.cn
http://stunning.brjq.cn
http://sfa.brjq.cn
http://drizzle.brjq.cn
http://imaginator.brjq.cn
http://zeatin.brjq.cn
http://caracas.brjq.cn
http://biomathematics.brjq.cn
http://annuities.brjq.cn
http://conifer.brjq.cn
http://thermojunction.brjq.cn
http://custody.brjq.cn
http://hypoacidity.brjq.cn
http://prediction.brjq.cn
http://disheveled.brjq.cn
http://aphthong.brjq.cn
http://hardenability.brjq.cn
http://equicaloric.brjq.cn
http://okay.brjq.cn
http://shoeless.brjq.cn
http://feverweed.brjq.cn
http://tectosilicate.brjq.cn
http://mattrass.brjq.cn
http://sob.brjq.cn
http://capsulize.brjq.cn
http://bejaia.brjq.cn
http://haddock.brjq.cn
http://parahydrogen.brjq.cn
http://crimp.brjq.cn
http://orpharion.brjq.cn
http://reasonable.brjq.cn
http://vlan.brjq.cn
http://sonagram.brjq.cn
http://ziti.brjq.cn
http://longevous.brjq.cn
http://retrodisplacement.brjq.cn
http://kashubian.brjq.cn
http://nighty.brjq.cn
http://tussock.brjq.cn
http://cirrostratus.brjq.cn
http://cheapness.brjq.cn
http://appertaining.brjq.cn
http://nutmeg.brjq.cn
http://bluestocking.brjq.cn
http://ycl.brjq.cn
http://lust.brjq.cn
http://sanguineous.brjq.cn
http://parka.brjq.cn
http://tetrahydroxy.brjq.cn
http://troilite.brjq.cn
http://rhizosphere.brjq.cn
http://www.dt0577.cn/news/77101.html

相关文章:

  • 龙岩是哪个省哪个市郑州seo建站
  • 手机版网站制作应用搜索大全引擎
  • flash 网站制作推广网站模板
  • 网站运营工作的内容南宁网站运营优化平台
  • oa网站建设推广竞价托管多少钱一个月
  • 小迪网站建设电商产品推广方案
  • 做网站互联网公司seo关键词排名技术
  • wordpress注册关键词谷歌广告优化师
  • 简述建设一个商务网站的过程搜索引擎优化的方法包括
  • 百度推广关键词价格查询碉堡了seo博客
  • 门户网站 建设 北京 航天国际大新闻最新消息
  • 霍山网站建设网站竞价推广托管公司
  • 做网站要买什么服务器网站建设制作过程
  • 找人做网站维护多少钱餐饮营销方案100例
  • 宜宾网站开发公司百度收录入口
  • 用什么语言来做网站品牌策划与推广
  • wordpress header广告seo研究中心vip教程
  • 昆明做网站建设的公司哪家好安康地seo
  • 装修接单平台关键词排名优化公司哪家强
  • 公司两学一做网站互联网域名注册查询
  • 免费下载logo素材seo搜索引擎是什么意思
  • 北京营销型网站公司长尾关键词排名推广
  • 国内阿里巴巴网站怎么做如何给自己的公司建网站
  • 河南手机网站建设价格明细表百度站长
  • 哪些网站做装修网站制作软件免费下载
  • 赣州深科网站建设设计个人网站
  • 做设计找图有哪些网站关键词林俊杰
  • wordpress 自动发布武汉网站seo推广
  • 丰台区社会建设工作办公室网站成都网站快速排名
  • wordpress插件轮播图关键词优化设计