(二十二)享元模式
来源:互联网 发布:怎么才能开淘宝店 编辑:程序博客网 时间:2024/05/09 00:30
享元模式(flyweight),运用共享技术有效地支持大量细粒度的对象。【DP】
UML:
源码:
// Flyweight.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>#include <hash_map>using namespace std;//网站class WebSite{public:virtual void Use(string user) = 0;};//具体的网站class ConcreteWebSite : public WebSite{private:string name;public:ConcreteWebSite(string name){this->name = name;}public:void Use(string user){cout << "网站分类:" << name << " 用户:" << user << endl;}};//网站工厂class WebSiteFactory{private:hash_map<string, WebSite*> flyweights;//这里使用了hash_map来存储大量的对象//获得网站分类public:WebSite *GetWebSiteCategory(string key){if (flyweights.end() == flyweights.find(key))flyweights.insert(pair<string, WebSite*>(key, new ConcreteWebSite(key)));return flyweights.find(key)->second;}//获得网站分类总数public:int GetWebSiteCount(){return flyweights.size();}};int _tmain(int argc, _TCHAR* argv[]){WebSiteFactory f;WebSite *fx = f.GetWebSiteCategory("产品展示");fx->Use("小菜");WebSite *fy = f.GetWebSiteCategory("产品展示");fy->Use("大鸟");WebSite *fz = f.GetWebSiteCategory("产品展示");fz->Use("娇娇");WebSite *fl = f.GetWebSiteCategory("博客");fl->Use("老顽童");WebSite *fm = f.GetWebSiteCategory("博客");fm->Use("桃谷六仙");WebSite *fn = f.GetWebSiteCategory("博客");fn->Use("南海鳄神");cout << "得到网站分类总数为 " << f.GetWebSiteCount() << endl;return 0;}
输出:
优点:
1.享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要成大量细粒度的类实力来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有事就能够受大幅度地减少需要实例化的类的数量。如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度减少单个实例的数目。
应用场景:
如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么就可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。
0 0
- (二十二)享元模式
- 二十二、享元模式
- 设计模式实现(二十二)--- 享元模式(Flyweight)
- 设计模式—享元模式(二十二)
- 设计模式(二十二)——享元模式
- 设计模式(二十二)---享元模式
- 设计模式(十二)享元模式
- 设计模式(十二)享元模式
- 二十二 设计模式之享元模式
- Java设计模式二十二:享元模式(Flyweight)
- 设计模式C++实现二十二:享元模式
- 设计模式之二十二:享元模式(FlyWeight)
- 设计模式笔记(二十二) —— 享元模式
- 《Android源码设计模式解析与实战》读书笔记(二十二)——享元模式
- 模式十二(享元模式)
- 设计模式学习笔记十二(Flyweight享元模式)
- 设计模式(十二)之Flyweight - 享元模式
- Java设计模式(十二)----享元模式
- linux命令——cut
- String操作符
- 3.1.Android控件架构与自定义控件详解之控件架构
- SQL:基础查阅手册
- 想吃鱼
- (二十二)享元模式
- cocos2dx 创建动画的几种方式
- String.format()用法
- 网易互娱2017实习生招聘在线笔试(三)
- 文件的粘滞位(sticky bit)
- ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Streaming result set
- 深入理解Java的接口和抽象类
- Android WebView使用总结
- 新手学习记录2:makefile学习实践--自定义变量的引入