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