website.h
#ifndef WEBSITE_H
#define WEBSITE_H
#include <QString>
#include <QtDebug>
class WebSite
{
public:
WebSite() {}
virtual void use() = 0;
};
class ConcreteWebSite : public WebSite
{
public:
ConcreteWebSite(QString name)
{
m_name = name;
}
void use()
{
qDebug() << "网站分类: " << m_name;
}
private:
QString m_name;
};
#endif // WEBSITE_H
WebSiteFactory.h
#ifndef WEBSITEFACTORY_H
#define WEBSITEFACTORY_H
#include <QStringList>
#include <QMap>
#include "website.h"
class WebSiteFactory
{
public:
WebSiteFactory() {}
WebSite *getWebSiteCategory(QString key)
{
if(!m_flyweights.contains(key))
{
ConcreteWebSite *con = new ConcreteWebSite(key);
m_flyweights.insert(key,con);
}
QMap<QString,ConcreteWebSite*>::iterator ite = m_flyweights.find(key);
return ite.value();
}
int getWebSiteCount()
{
return m_flyweights.count();
}
private:
QMap<QString,ConcreteWebSite*> m_flyweights;
};
#endif // WEBSITEFACTORY_H
main.cpp
#include <QApplication>
#include "WebSiteFactory.h"
#include "website.h"
//享元模式
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WebSiteFactory *f = new WebSiteFactory();
WebSite *fx = f->getWebSiteCategory("博客");
fx->use();
fx = f->getWebSiteCategory("博客");
fx->use();
fx = f->getWebSiteCategory("产品展示");
fx->use();
qDebug() << "网站数量:" << f->getWebSiteCount();
return a.exec();
}
输出结果
网站分类: "博客"
网站分类: "博客"
网站分类: "产品展示"
网站数量: 2
享元模式,对同类别只创建一个实例。
UML