Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1887004
  • 博文数量: 496
  • 博客积分: 12043
  • 博客等级: 上将
  • 技术积分: 4778
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-27 14:26
文章分类

全部博文(496)

文章存档

2014年(8)

2013年(4)

2012年(181)

2011年(303)

2010年(3)

分类: C/C++

2012-06-14 09:34:39

目标:运用共享技术有效地支持大量细粒度的对象(对于 C++来说就是共用一个内存块啦,对象指针指向同一个地方)
。如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销就应该考虑使用。还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用较少的共享对象取代多组对象,此时可以考虑使用享元。

示例代码:
#include
#include
#include

using namespace std;

//抽象的网站
class WebSite
{
public:
    virtual void Use()=0;
};

//具体的共享网站
class ConcreteWebSite : public WebSite
{
private:
    string name;
public:
    ConcreteWebSite(string strName)
    {
        name = strName;
    }
    virtual void Use()
    {
        cout << "网站的分类: " << name << endl;
    }
};

//不共享的网站
class UnShareWebSite : public WebSite
{
private:
    string name;
public:
    UnShareWebSite(string strName)
    {
        name = strName;
    }
    virtual void Use()
    {
        cout << "不共享的网站: " << name << endl;
    }
};

//网站工厂类,用于存放共享的WebSite对象
class WebFactory
{
private:
    vector website;
public:
    WebSite* GetWeb()
    {
        vector::iterator p = website.begin();
        return *p;
    }
    WebFactory()
    {
        website.push_back(new ConcreteWebSite("测试"));
    }
};

//客观端
int main()
{
    WebFactory* f = new WebFactory();
    WebSite* ws = f->GetWeb();
    ws->Use();
   
    WebSite* ws2 = f->GetWeb();
    ws2->Use();
   
    //不共享的类
    WebSite* ws3 = new UnShareWebSite("测试");
    ws3->Use();
   
    return 0;
}

阅读(1115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~