设计模式——享元模式

一、说明
享元模式:运用共享技术有效地支持大量细粒度的对象。在有大量对象时,把其中共同的部分抽象出来,如果有相同的业务请求,直接返回内存中已有的对象,避免重新创建。
以下情况可以考虑使用享元模式:
系统中有大量的对象,这些对象消耗大量的内存,且这些对象的状态可以被外部化。
对于享元模式,需要将对象的信息分为两个部分:内部状态和外部状态。内部状态是指被共享出来的信息,储存在享元对象内部且不随环境变化而改变;外部状态是不可以共享的,它随环境改变而改变,是由客户端控制的。
二、代码

#ifndef SHARE_H
#define SHARE_H
#include <QString>
#include <QMap>
#include <QDebug>
class abstractConsumer{
public:
    virtual ~abstractConsumer(){}
    virtual void setArticle(const QString& article)=0;
    virtual const QString& article()=0;
};

class consumer:public abstractConsumer{
public:
    consumer(const QString& name):m_name(name){}
    ~consumer() override;
    void setArticle(const QString &article) override{
        m_article = article;
    }
    const QString & article() override{
        return m_article;
    }
private:
    QString m_name;
    QString m_article;
};

class factory{
public:
    factory(){}
    ~factory(){
        QMap<QString,consumer*>::iterator iter;
        for(iter = m_consumerMap.begin();iter!=m_consumerMap.end();iter++){
            delete iter.value();
        }
        m_consumerMap.clear();
    }
    void hosting(const QString& user,const QString& article){
        consumer *pConsumer;
        if(m_consumerMap.contains(user)){
            pConsumer = m_consumerMap.value(user);
        }else{
            pConsumer = new consumer(user);
            m_consumerMap.insert(user,pConsumer);
        }
        pConsumer->setArticle(article);
    }
    void display(){
        QMap<QString,consumer*>::iterator iter;
        for(iter = m_consumerMap.begin();iter!=m_consumerMap.end();iter++){
            qDebug()<<iter.key()<<iter.value()<<iter.value()->article();
        }
    }
private:
    QMap<QString,consumer*> m_consumerMap;
};

#endif // SHARE_H

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值