大话设计模式--享元模式 Flyweight -- C++实现实例
来源:互联网 发布:接收手机短信的软件 编辑:程序博客网 时间:2024/06/05 21:04
1. 享元模式: 运用共享技术有效地支持大量细粒度的对象。
享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生成大量颗粒度的类实例来表示数据,如果能发现这些实例除了几个参数外基本都是相同的,有时就能够受大幅度地减少需要实例化的类的数量,如果能把那些参数移到类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度地减少单个实例的数目。
如果一个应用程序使用了大量对象,而大量的这些对象造成大量存储开销时就应该考虑使用享元模式,还有就是对象大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。
实例: (例子中 对象实例实际只有两个)
website.h website.cpp
#ifndef WEBSITE_H#define WEBSITE_H#include "user.h"class WebSite{public: WebSite(); void virtual use(User *user)=0;};#endif // WEBSITE_H
#include "website.h"WebSite::WebSite(){}
concretewebsite.h concretewebsite.cpp
#ifndef CONCRETEWEBSITE_H#define CONCRETEWEBSITE_H#include "website.h"#include <QString>class ConcreteWebSite : public WebSite{public: ConcreteWebSite(QString type); void use(User *user);private: QString type;};#endif // CONCRETEWEBSITE_H
#include "concretewebsite.h"#include <QDebug>ConcreteWebSite::ConcreteWebSite(QString type){ this->type = type;}void ConcreteWebSite::use(User *user){ qDebug() << "WebType: " << type << " User: " << user->getName();}
user.h user.cpp
#ifndef USER_H#define USER_H#include <QString>class User{public: User(QString name); QString getName();private: QString name;};#endif // USER_H
#include "user.h"User::User(QString name){ this->name = name;}QString User::getName(){ return this->name;}
websitefactory.h websitefactory.cpp
#ifndef WEBSITEFACTORY_H#define WEBSITEFACTORY_H#include <QMap>#include <QString>#include "concretewebsite.h"class WebSiteFactory{public: WebSiteFactory(); WebSite* getWebSiteCategory(QString type); int getWebCount();private: QMap<QString, WebSite*> *webMap;};#endif // WEBSITEFACTORY_H
#include "websitefactory.h"WebSiteFactory::WebSiteFactory(){ webMap = new QMap<QString, WebSite*>();}WebSite* WebSiteFactory::getWebSiteCategory(QString type){ if(webMap->value(type)==NULL) webMap->insert(type, new ConcreteWebSite(type)); return webMap->value(type);}int WebSiteFactory::getWebCount(){ return webMap->count();}
main.cpp
#include <QCoreApplication>#include "websitefactory.h"int main(int argc, char *argv[]){ WebSiteFactory f; WebSite *fx = f.getWebSiteCategory("show"); fx->use(new User("xiaoming")); WebSite *fy = f.getWebSiteCategory("show"); fy->use(new User("lisi")); WebSite *fz = f.getWebSiteCategory("show"); fz->use(new User("zhangsan")); WebSite *ffx = f.getWebSiteCategory("blog"); ffx->use(new User("xiaoming")); WebSite *ffy = f.getWebSiteCategory("blog"); ffy->use(new User("lisi")); WebSite *ffz = f.getWebSiteCategory("blog"); ffz->use(new User("zhangsan"));}
- 大话设计模式--享元模式 Flyweight -- C++实现实例
- 《大话设计模式》--项目多也别傻做--享元模式<FlyWeight>(26)
- Net设计模式实例之享元模式( Flyweight Pattern)
- Flyweight(享元)设计模式
- 设计模式:Flyweight模式(享元模式)
- 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)
- 设计模式(C#)之享元模式(Flyweight Pattern)
- C++设计模式实现--享元(Flyweight模式)
- 设计模式实现(二十二)--- 享元模式(Flyweight)
- 设计模式之Flyweight享元模式
- 设计模式----Flyweight(享元)模式
- Java设计模式-----FlyWeight享元模式
- 设计模式—FlyWeight享元模式
- 设计模式--享元模式(Flyweight)
- 设计模式(13)-享元模式(Flyweight)
- Java 享元模式(Flyweight) 设计模式
- Java设计模式-----FlyWeight享元模式
- 【设计模式】之 Flyweight享元模式
- Could not launch app - No such file or directory Error
- OpenCV中的doc文件夹 和 相关文档
- QT资源网址
- Wireshark-数据包过滤和分析
- Windbg断点命令
- 大话设计模式--享元模式 Flyweight -- C++实现实例
- ORACLE分析函数(7)----自定义聚合函数
- iPhone开发--uitableview
- 修改系统api,变量编译报错
- 在ubuntu配置apache环境的时候碰到修改端口仍然无法访问
- 【RuntimeException运行时异常】方法不需要throws、调用该方法的程序不需要try-catch
- C/C++计算时间
- Documentation/x86/usb-legacy-support.txt
- 在VC中编译、运行程序的小知识点