利用享元模式模拟网站对象建立 C++

news/2024/5/12 3:46:22/文章来源:https://blog.csdn.net/zhyh1435589631/article/details/51035773

1. 享元模式的概念

享元模式, 运用共享技术可以有效的支持大量细粒度的对象。
利用享元工厂, 用来创建并且管理 享元对象。
我们把享元对象内部并且不会随着环境改变而改变的部分, 称为是享元的内部对象, 而把随着环境改变而改变的, 不可以被共享的状态, 称为是外部对象。
享元模式, 可以避免大量相似的类的开销。在程序设计过程中, 有时候需要生成大量细粒度的类实例来表示数据。 如果可以发现这些实例除了几个参数之外基本都是相同的话, 就可以大幅度的减少单个实例的数目。
简单的来说, 本来我们需要为每个用户, 每类网站, 都构建一个类的实例。
这里写图片描述
但是, 利用享元模式, 我们提取相同部分, 进行改造, 借助享元工厂, 可以避免创建大量的类实例
这里写图片描述

通常, 如果一个应用程序使用了大量的对象, 而大量的这些对象造成了很大的存储开销的时候, 我们就需要考虑享元模式了, 另外如果对象的大多数对象可以使用外部状态表示, 如果删除这些对象的外部对象, 那么就可以使用相对较少的共享对象取代很多组对象, 这时候也是需要考虑享元模式的。

享元模式需要维护一个记录了系统已有的所有享元的列表, 本身也是需要耗费资源的, 还有他会使得系统变得复杂。

2. UML

这里写图片描述

3. 运行效果图

这里写图片描述

4. code

user.h

#ifndef _USER_H_
#define _USER_H_#include <string>
using std::string;class User{
public:string Name() const { return name; }User(string name) :name(name){}private:string name;
};#endif // _USER_H_

website

#ifndef _WEBSITE_H_
#define _WEBSITE_H_#include "User.h"class WebSite{
public:virtual void Use(User * user) = 0;
};#endif

concreteWebsite.h

#ifndef _CONCRETEWEBSITE_H_
#define _CONCRETEWEBSITE_H_#include "WebSite.h"
#include <string>
#include <iostream>using std::cout;
using std::endl;
using std::string;class ConcreteWebsite : public WebSite{
public:ConcreteWebsite(string name) : name(name){}void Use(User * user){cout << "网站分类:\t" << name << " 用户:\t" << user->Name() << endl;}private:string name;
};#endif // _CONCRETEWEBSITE_H_

websiteFactory.h

#ifndef _WEBSITEFACTORY_H_
#define _WEBSITEFACTORY_H_#include "ConcreteWebSite.h"
#include <string>
#include <memory>
#include <unordered_map>using std::string;
using std::unordered_map;
using std::shared_ptr;
using std::make_pair;class WebsiteFactory{
public:shared_ptr<WebSite> GetWebSiteCategory(string key){if (flyweights.find(key) == flyweights.end())flyweights.insert(make_pair(key, shared_ptr<WebSite>(new ConcreteWebsite(key))));return flyweights[key];}int GetWebSiteCount(){ return flyweights.size(); }private:unordered_map<string, shared_ptr<WebSite>> flyweights;
};#endif // _WEBSITEFACTORY_H_

main.cpp

#include <string>
#include <memory>using namespace std;int main(){shared_ptr<WebsiteFactory> f(new WebsiteFactory);shared_ptr<WebSite> fx = f->GetWebSiteCategory("产品展示");fx->Use(shared_ptr<User>(new User("大鸟")).get());shared_ptr<WebSite> fy = f->GetWebSiteCategory("产品展示");fy->Use(shared_ptr<User>(new User("小菜")).get());shared_ptr<WebSite> fz = f->GetWebSiteCategory("产品展示");fz->Use(shared_ptr<User>(new User("娇娇")).get());system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_856910.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建站的辛酸历程

1、首先需要服务器和域名&#xff0c;域名当时看某博主写的新网&#xff0c;然后就选了一个买下&#xff0c;还没绑定个人信息就收到了平均一周俩骚扰电话。强烈不建议新网。 万网被阿里收购了&#xff0c;如果买阿里云的服务建议直接万网选域名&#xff0c;域名买好后还需要备…

Python爬虫模拟登录带验证码网站

点我进入原文 Python爬虫模拟登录带验证码网站 这篇文章主要介绍了Python爬虫模拟登录带验证码网站的相关资料,需要的朋友可以参考下 爬取网站时经常会遇到需要登录的问题&#xff0c;这是就需要用到模拟登录的相关方法。python提供了强大的url库&#xff0c;想做到这个并不难。…

scrapy 学习笔记1 爬取 www.dmoz.org 网站信息

1. 安装配置 具体的安装过程&#xff0c; 官网已经写的很清楚了http://doc.scrapy.org/en/latest/intro/install.html#windows不过在实际安装过程中还是遇到了一个小问题&#xff1a; ie, 缺少microsoft visual c 9.0 运行库&#xff0c; 上图中已经告诉我们了解决方法&am…

基于 flask 框架的模拟instagram 图片分享网站的开发

1. 前言 我们的目标是模拟instagram 制作一个图片分享的网站&#xff0c; 我们这里选用的是 flask 框架&#xff0c; 这个框架小巧&#xff0c; 易于扩展&#xff0c; 简单易用 2. 基本思路 利用sqlalchemy 构建 数据库 orm&#xff0c; 建立 user&#xff0c; image&#x…

基于 flask 框架的模拟instagram 图片分享网站的开发 2

1. 前言 我们之前写过一篇博文http://blog.csdn.net/zhyh1435589631/article/details/51787577&#xff0c; 在那篇博文里面&#xff0c; 我们完成了instagram 网站开发的几个基本功能&#xff0c; 包括首页展示&#xff0c; 个人信息页面显示&#xff0c; 图片详情页面展示等…

基于 flask 框架的模拟instagram 图片分享网站的开发 3

1. 摘要 这次添加的功能是 实现首页和 个人信息页面的异步加载功能 传送门&#xff1a; 基于 flask 框架的模拟instagram 图片分享网站的开发 2 基于 flask 框架的模拟instagram 图片分享网站的开发 1 2. 流程 2.1 profile.js 分析 这里需要编写相应的js 代码&#xff0…

基于 flask 框架的模拟instagram 图片分享网站的开发 4

1. 摘要 这次添加的功能是 个人页图片上传功能和图片详情页评论异步加载功能 传送门&#xff1a; 基于 flask 框架的模拟instagram 图片分享网站的开发 3 基于 flask 框架的模拟instagram 图片分享网站的开发 2 基于 flask 框架的模拟instagram 图片分享网站的开发 1 2. …

基于 flask 框架的模拟instagram 图片分享网站的开发 7 (爬虫机器人)

1. 前言 我们之前使用flask实现了一个模拟instagram的图片分享网站的开发&#xff0c; 但是图片的更新需要用户上传&#xff0c; 但是由于用户比较少&#xff0c; 鉴于这个问题&#xff0c; 我们就考虑引入一个爬虫机器人&#xff0c; 自动的向web程序相关的数据库表项中写入数…

url带斜杠和不带斜杠对seo优化的影响

点我进入原文 ps: seo 是指搜索引擎优化 url带斜杠和不带斜杠对seo优化的影响 作为seo的专员对于这个问题&#xff0c;我觉得很多细心的人都能发现&#xff0c;这二者的区别&#xff0c;但是不知道其中奥妙。今天博主给大家说说关于搜索引擎网址中带/与不带/对于seo的影响。 在…

高并发高流量网站架构

http://blog.csdn.net/SmartTony/archive/2010/09/09/5874485.aspx Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网…

从“奥运门票网站800万访问量”想到的成本、质量、进度、风险等关系

看到这个新闻后颇有一番滋味&#xff0c;更体验到我一直关注的软件性能着实无处不在&#xff0c;这个案例也确实值得我们好好反思一下。 不知道网友们有没有报名参加国际日语考试的——这个网站每年05年前都有人不能报名&#xff0c;因为报名人数太多&#xff0c;所以报名当日大…

h5跳微信小程序流程实现——使用云函数,不开通静态网站

官方开源库&#xff1a; GitHub TCloudBase/WXSEVER-SMS 参考教程&#xff1a; https://developers.weixin.qq.com/community/develop/doc/000ae2a7a7c9402a4d8bca2875b409 此教程为官方提供&#xff0c;包含视频文档 步骤&#xff1a; 1. 开通云开发 2. 新建云函数 ope…

搜索引擎SEO外挂:一边搜索,一边看PageRank

搜索引擎SEO外挂&#xff1a;一边搜索&#xff0c;一边看PageRank 下载地址&#xff1a;多么乐站长工具 我原来曾写过一篇统计分析搜索引擎排名和Page Rank 关联分析 的文章。很多人引用&#xff0c;回复和我讨论了我的结论。有赞成的&#xff0c;有反对的&#xff0c;有鼓励的…

seo优化:把百度放进数据库

seo优化:把百度放进数据库 有时候我想&#xff0c;能把百度的数据放进数据库&#xff0c;用广大程序员熟悉的sql语句查询百度的搜索结果应该是一个不错的主意。在这方面Google早已经跨出了一大步&#xff0c;利用Google Search API 把Google的搜索结果放进数据库是很容易办到得…

商业网站 第八章 注册登陆模板设计

注册——插入记录 服务器行为——添加——插入记录——连接:web_ljdata——插入到表格&#xff1a;T_user——获取值自&#xff1a;form1(注册表单&#xff09;——表单元素——注册成功后&#xff1a;插入后转到&#xff08;注册成功表单&#xff09; 验证登陆信息 数据库面板…

网站推荐机制中的艺术、科学与商务问题

网站推荐机制是电子商务或内容网站的核心功能之一。例如你在一个网站买了一本书后&#xff0c;网站会推荐其他你可能会感兴趣的书。这被认为是亚马逊等电子商务巨头成功的关键。本文对几个出色的推荐系统进行了较透彻的分析。 2006年10月&#xff0c;Netflix搞了一次不寻常的有…

平面设计素材网站-庞姿姿

哈喽&#xff0c;大家好&#xff01;今天为大家分享的是免费的平面设计素材网站&#xff0c;设计类网站是大家在所难免需要的了吧&#xff0c;下面就是我发现的比较好用的免费的平面设计素材网站&#xff0c;感兴趣的小伙伴看过来&#xff0c;如果你还发现其它好的网站评论一起…

OpenCms创建网站过程图解——献给OpenCms的初学者们

很多人都听说了OpenCms&#xff0c;知道了它的强大&#xff0c;索性的下载安装了&#xff0c;终于见到了久违OpenCms&#xff0c;看到了它简洁的界面&#xff0c;欣喜过后却不免一脸茫然&#xff0c;这个东西怎么用&#xff0c;我怎么用它来建站&#xff0c;从哪开始&#xff0…

视觉素材-免费高清!10个无版权限制的大图特供网站

今天为大家整理目前优秀的提供免费图片素材资源网站&#xff0c;这些网站的图片质量相当高&#xff0c;大部分为高分辨率&#xff08;高解析&#xff09;&#xff0c;并且&#xff0c;最重要的是&#xff0c;它是免费的&#xff0c;无版权限制&#xff01;同时具备免费、高清&a…

获取任意网站的图标,标题栏logo,网站logo的方法

不错呦~我想要这个图标怎么办呢&#xff1f; 直接使用网址加上&#xff1a; https://csdn.net/favicon.ico 获取到了 说明&#xff1a;这种方法适用于百分之九十的站点&#xff0c;如果你有想要使用的LOGO或者ico可以使用此方法简单获取。