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

上海建设工程安全质量监督站网站建设工程施工合同样本

上海建设工程安全质量监督站网站,建设工程施工合同样本,网站建设陆金手指下拉壹玖,诸暨城乡与建设局网站链接:C 设计模式 链接:C 设计模式 - 单例模式 享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享尽可能多的相同对象来减少内存使用和提高性能。享元模式适用于大量细粒度对象的场景,这些对象之…

链接:C++ 设计模式
链接:C++ 设计模式 - 单例模式

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享尽可能多的相同对象来减少内存使用和提高性能。享元模式适用于大量细粒度对象的场景,这些对象之间有很多相同的部分,可以通过共享来减少内存消耗。

1.问题分析

在开发中,尤其是在需要大量细粒度对象的场景中,内存使用和性能优化是两个重要的考虑因素。例如,在图形界面、文本编辑器、游戏开发等领域,可能会有大量相似或相同的对象需要频繁创建和使用。如果每次都创建新的对象,不仅会占用大量内存,还会导致性能下降。

为了解决这些问题,我们可以结合工厂方法模式和延迟初始化来实现享元模式。具体来说,我们可以定义一个工厂类,通过延迟初始化和独立工厂函数来动态创建和缓存具体的对象。

2.实现步骤:

  1. 定义享元接口:定义一个抽象的接口,包含一个执行方法。
  2. 实现具体享元类:实现享元接口,定义具体的类。
  3. 定义独立工厂函数:定义一个独立的工厂函数,用于根据类型动态创建具体的对象。
  4. 实现享元工厂:实现一个工厂类,通过延迟初始化和独立工厂函数来动态创建和缓存具体的对象。
  5. 客户端代码:使用享元工厂获取具体对象,并执行。

3.代码示例

以机器人舞蹈动作作为示例。

3.1.定义享元接口

// 享元接口
class DanceMove {public:virtual ~DanceMove() = default;virtual void execute() = 0;
};

3.2.实现具体享元类

// 具体享元类1,抬手动作
class RaiseHand : public DanceMove {public:void execute() override { std::cout << "Executing Raise Hand Move" << std::endl; }
};
// 具体享元类2,转身动作
class TurnAround : public DanceMove {public:void execute() override { std::cout << "Executing Turn Around Move" << std::endl; }
};
// 具体享元类3,踢腿动作
class KickLeg : public DanceMove {public:void execute() override { std::cout << "Executing Kick Leg Move" << std::endl; }
};

3.3.定义独立工厂函数

// 独立工厂函数
std::shared_ptr<DanceMove> createDanceMove(const std::string& type) {if (type == "RaiseHand") {return std::make_shared<RaiseHand>();} else if (type == "TurnAround") {return std::make_shared<TurnAround>();} else if (type == "KickLeg") {return std::make_shared<KickLeg>();} else {return nullptr;}
}

3.4.实现享元工厂类

// 享元工厂
class DanceMoveFactory {public:// 获取舞蹈动作std::shared_ptr<DanceMove> getDanceMove(const std::string& type) {auto it = danceMoveMap_.find(type);if (it != danceMoveMap_.end()) {return it->second;} else {// 创建动作std::shared_ptr<DanceMove> danceMove = createDanceMove(type);if (danceMove) {danceMoveMap_[type] = danceMove;return danceMove;} else {throw std::runtime_error("Dance move type not recognized: " + type);}}}private:std::unordered_map<std::string, std::shared_ptr<DanceMove>> danceMoveMap_;
};

3.5.客户端代码

// 客户端代码
int main() {DanceMoveFactory factory;try {// 获取并执行舞蹈动作auto raiseHand = factory.getDanceMove("RaiseHand");raiseHand->execute();auto turnAround = factory.getDanceMove("TurnAround");turnAround->execute();auto kickLeg = factory.getDanceMove("KickLeg");kickLeg->execute();// 再次获取舞蹈动作,验证是否共享了相同类型的动作对象auto raiseHand2 = factory.getDanceMove("RaiseHand");raiseHand2->execute();std::cout << "raiseHand address: " << raiseHand.get() << std::endl;std::cout << "raiseHand2 address: " << raiseHand2.get() << std::endl;// 尝试获取未注册的舞蹈动作auto unknownMove = factory.getDanceMove("UnknownMove");unknownMove->execute();} catch (const std::exception& e) {std::cerr << "Error: " << e.what() << std::endl;}return 0;
}
http://www.yayakq.cn/news/54525/

相关文章:

  • 甘肃网站建设公司哪家好广州网站建设找哪家
  • 网站建设好了还要收取维护费网站 体系
  • 厦门做企业网站比较好的公司敬请期待图片
  • 网站备案为何要关站江苏专业做网站的公司哪家好
  • 企企管理云平台优化公司哪家好
  • icp备案是网站上线前福建住房和城乡建设部网站首页
  • 服饰网站建设 e-idea福州电子商务网站建设
  • 昆明做网站的个人网站开发用了什么平台
  • 稻壳企业网站模板网站建设什么是开发实施实施
  • asp装修公司网站清远企业网站建设公司
  • 西安专业建设网站沈阳网站建设简维
  • 哪些网站可以做自媒体画江湖网站开发文档
  • 聊城那里做网站猴痘的治疗方法
  • 河北邯郸移动网站建设企业内部网站模板
  • 万州工程建设招投标网站宣传网站建设意义
  • 重庆建设空调网站wordpress id重置
  • 最火的深圳网站建设微信精准推广
  • 网站建设设计收费WordPress图片处理工具
  • 电商公司网站网站建设的通知
  • 规划电子商务网站网站开发aichengkeji
  • 济宁市城市建设局网站wordpress 图片收录
  • 南宁企业网站建站开州快速建网站
  • 自己做的网站本地虚拟上传建立网站要多少钱
  • 做网站公司如何赚钱微信网站制作软件有哪些
  • 网站信息化建设合同字号 wordpress
  • 网站文章怎么做才能被收录仿站小工具怎么用
  • 怎么做响应式网站如何在手机上开发软件
  • seo网站编辑在线做网站索引
  • 广东网站开发推荐厦门市建设工程造价网站首页
  • 网站建设对于网络营销的意义wordpress cherish