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

网站设计与开发怎么做网站地图是什么样子的

网站设计与开发怎么做,网站地图是什么样子的,设计网站的制作框架,平面广告设计培训1、介绍 原理#xff1a; 享元模式是一种主要用于减少创建对象的数量#xff0c;以减少内存占用和提高性能的结构型设计模式。它通过共享多个对象所共有的相同状态#xff0c;使得在有限的内存容量中能够载入更多的对象。具体来说#xff0c;享元模式将对象的状态分为内部…1、介绍 原理 享元模式是一种主要用于减少创建对象的数量以减少内存占用和提高性能的结构型设计模式。它通过共享多个对象所共有的相同状态使得在有限的内存容量中能够载入更多的对象。具体来说享元模式将对象的状态分为内部状态Intrinsic State和外部状态Extrinsic State。 内部状态是存储在享元对象内部的信息它是不可变的可以在多个享元对象之间共享。 外部状态是依赖于享元对象上下文的信息它随着享元对象的每一次使用而变化通常作为参数传递给享元对象的方法。 享元模式的核心在于享元工厂类它负责创建和管理享元对象并提供对外访问的接口。当客户端请求一个享元对象时享元工厂会首先检查是否已存在具有相同内部状态的享元对象如果存在则直接返回该对象否则创建一个新的享元对象并存储起来。通过这种方式享元模式实现了对象的复用减少了对象的创建和销毁次数从而提高了系统的性能。 使用场景 享元模式通常用于以下场景 1系统中存在大量相似对象当系统中需要创建大量细粒度的对象并且这些对象具有相同的内部状态时可以使用享元模式来减少对象的数量节省内存空间。 2对象的创建和销毁代价较大如果对象的创建和销毁需要消耗大量的计算资源或时间使用享元模式可以通过复用已有的对象来避免不必要的创建和销毁操作从而提高系统的性能。 3系统不依赖于对象身份在享元模式中由于多个客户端可能共享同一个享元对象因此系统不应该依赖于对象的身份即内存地址来区分不同的对象。相反系统应该通过对象的内部状态和外部状态来区分对象。 优缺点 优点 1减少了对象的数量降低了内存占用。 2提高了系统的性能减少了对象的创建和销毁次数。 3支持可变状态和不可变状态提高了对象的灵活性。 缺点 1增加了系统的复杂性需要额外的工厂类来管理享元对象的创建和共享。 2可能引入线程安全问题需要对共享对象的并发访问进行合理的同步控制。 总结 C享元模式通过共享对象的内部状态来减少对象的数量从而节省内存空间并提高系统的性能。它适用于处理大量相似对象或对象创建和销毁代价较大的场景。然而引入享元模式也会增加系统的复杂性并可能引入线程安全问题。因此在使用享元模式时需要根据具体情况权衡利弊合理设计和管理共享对象。 2、示例 示例模拟了一个咖啡店订单系统其中咖啡口味被视为享元对象可以被多个订单共享。 #include iostream #include map #include vector #include memory// 抽象享元接口 class CoffeeFlavor { public:virtual ~CoffeeFlavor() {}virtual void serve() const 0; };// 具体享元类 class ConcreteCoffeeFlavor : public CoffeeFlavor { public:explicit ConcreteCoffeeFlavor(const std::string flavorName): flavorName_(flavorName) {}void serve() const override {std::cout Serving coffee flavor: flavorName_ std::endl;}private:std::string flavorName_; };// 享元工厂 class CoffeeFlavorFactory { private:std::mapstd::string, std::shared_ptrCoffeeFlavor flavors;public:std::shared_ptrCoffeeFlavor getOrder(const std::string flavor) {if (flavors.find(flavor) flavors.end()) {flavors[flavor] std::make_sharedConcreteCoffeeFlavor(flavor);}return flavors[flavor];} };int main() {CoffeeFlavorFactory factory;// 创建几个不同的订单但某些口味会被共享std::vectorstd::string orders {Espresso, Latte, Espresso, Cappuccino, Espresso};for (const auto order : orders) {auto flavor factory.getOrder(order);flavor-serve();}return 0; }在这个例子中 1CoffeeFlavor 是抽象享元类定义了所有咖啡口味的基本行为即服务serve咖啡。         2ConcreteCoffeeFlavor 是具体享元类实现了咖啡口味的具体行为并存储了口味名称这一内部状态。         3CoffeeFlavorFactory 是享元工厂它维护了一个储存所有咖啡口味实例的映射表。当客户请求某个口味的咖啡时工厂会检查是否已经创建过该口味的实例如果没有则创建一个新的实例否则返回已有的实例从而实现了口味的共享。 运行此代码可以看到虽然订单列表中有多个Espresso但在打印结果中只会看到一次Serving coffee flavor: Espresso这是因为享元模式让多次请求相同口味的咖啡共享了同一个实例。 实际上上述咖啡口味享元模式的案例并没有体现出享元模式对外部状态的处理。在一个更全面的示例中我们可能还会遇到咖啡订单具有外部状态如客户的偏好加糖、加奶、杯子大小等。这时可以对示例稍作修改将外部状态从享元对象中分离出来 #include iostream #include map #include vector #include memory// 抽象享元接口 class CoffeeFlavor { public:virtual ~CoffeeFlavor() {}virtual void serve(const std::string extras, const std::string size) const 0; };// 具体享元类 class ConcreteCoffeeFlavor : public CoffeeFlavor { public:explicit ConcreteCoffeeFlavor(const std::string flavorName): flavorName_(flavorName) {}void serve(const std::string extras, const std::string size) const override {std::cout Serving size cup of flavorName_ with extras: extras std::endl;}private:std::string flavorName_; };// 享元工厂 class CoffeeFlavorFactory { private:std::mapstd::string, std::shared_ptrCoffeeFlavor flavors;public:std::shared_ptrCoffeeFlavor getOrder(const std::string flavor) {if (flavors.find(flavor) flavors.end()) {// 没有找到就新建一个对象flavors[flavor] std::make_sharedConcreteCoffeeFlavor(flavor);}return flavors[flavor];} };// 订单类包含外部状态 class CoffeeOrder { public:CoffeeOrder(std::shared_ptrCoffeeFlavor flavor, const std::string extras, const std::string size): flavor_(flavor), extras_(extras), size_(size) {}void serve() const {flavor_-serve(extras_, size_);}private:std::shared_ptrCoffeeFlavor flavor_;std::string extras_;std::string size_; };int main() {CoffeeFlavorFactory factory;// 创建几个不同的订单但某些口味会被共享std::vectorCoffeeOrder orders {{factory.getOrder(Espresso), no sugar, small},{factory.getOrder(Latte), extra foam, medium},{factory.getOrder(Espresso), double sugar, large},{factory.getOrder(Cappuccino), cinnamon, medium},{factory.getOrder(Espresso), single sugar, small}};for (const auto order : orders) {order.serve();}return 0; }结果 Serving small cup of Espresso with extras: no sugar Serving medium cup of Latte with extras: extra foam Serving large cup of Espresso with extras: double sugar Serving medium cup of Cappuccino with extras: cinnamon Serving small cup of Espresso with extras: single sugar 3、参考 C设计模式之——享元模式详解和代码案例_c享元模式-CSDN博客
http://www.w-s-a.com/news/521440/

相关文章:

  • 桂林建站平台哪家好给别人做网站怎么收取费用
  • python做网站显示表格用visual做的网站
  • 彩票网站建设需要什么聊城网站建设首选天成网络
  • 安徽建设工程网站wordpress标签云代码
  • 推荐佛山顺德网站建设手机网站建设域名空间
  • 电子商务网站建设策划书例子企业官网用什么cms系统
  • 网站栏目设计怎么写平面设计接单报价表
  • 做网站美工要学什么网站推广的方法包括
  • 哪个网站可以做笔译兼职wordpress加表单
  • 百度站内搜索 wordpress微餐饮建站费用
  • 用什么做网站的访问量统计制作手工作品
  • 微信公众号搭建网站河南卫生基层系统网站建设
  • steam账号注册网站重庆手机版建站系统哪家好
  • 中新生态城建设局门户网站wordpress云盘视频播放
  • 大型网站开发基本流程wordpress记录用户搜索
  • 云服务器安装win系统做网站wordpress边栏扩大尺寸
  • 网站开发面试自我介绍软件下载网站如何建设
  • 可以做翻译任务的网站陕西省建设厅八大员证
  • 昆明 网站推广重庆网页优化seo公司
  • 网站排名下降怎么上去设计一套app页面多少钱
  • 专门用来查找网址的网站查公司名字是否被注册
  • 自己创建网站教程河南省建设厅官方网站李学军
  • 一个网站需要多少容量怎样免费设计网站建设
  • 建设工程交易中心网站12306的网站是哪个公司做的
  • 建设网站经营范围自己给公司做网站
  • 河北省住房建设厅政务网站网络营销推广的岗位职责有哪些
  • 上海网站建设优化价格孝义做网站的公司
  • 哪个公司网站做的最好义乌 网站 制作
  • 百度站长工具综合查询wordpress 上传pdf
  • 旅游短租公寓网站建设深圳龙岗招聘网