首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问个设工厂模式的有关问题

2012-03-13 
问个设工厂模式的问题我做了一个程序,用户到了工厂模式。工厂类是这样做的:C/C++ codem_mapInst[nSytle1]

问个设工厂模式的问题
我做了一个程序,用户到了工厂模式。工厂类是这样做的:

C/C++ code
m_mapInst[nSytle1] = new CStyle1;m_mapInst[nSytle2] = new CStyle2;m_mapInst[nSytle3] = new CStyle3;m_mapInst[nSytle4] = new CStyle4;m_mapInst[nSytle5] = new CStyle5;


需要什么实例,调用工厂类的函数获取。
做完了之后发现,这样每个实例都是单利的。
而我的程序中可能需要将一个类实例化好几个,不能使用单例模式。
不知道我的这个工厂类应该怎么改?

[解决办法]
C/C++ code
工厂模式是将对象的实例化延迟到子类,工厂根据类型创建子类对象 有两种方法 传参和模板单例模式是一个类有且只有一个实例#include <iostream>#include <string>//抽象基类定义调用接口class Base                                                                                                                                                                                                                                                                                           {public:    Base(){}    virtual ~Base(){} //防止内存泄漏 必须为virtual    virtual void print()=0;    };class Derived_1: public Base{public:    void print()    {        std::cout<<"derived_1.print()"<<std::endl;    }};class Derived_2 : public Base{public:    void print()    {        std::cout<<"derived_2.print()"<<std::endl;    }};//工厂模式 模板创建法template < typename T >class Factory{public:    Factory(){}    Base* Create()    {        m_pBase = new T();        return m_pBase;    }    ~Factory()    {        delete m_pBase;    }private:    Base* m_pBase;};//工厂模式 类型创建class TypeFactory{public:    TypeFactory(){}    virtual ~TypeFactory()    {        delete m_pBase;    }    Base* Create(std::string type)    {        if( type == "Derived_1")        {            m_pBase = new Derived_1();        }        else        {            m_pBase = new Derived_2();        }        return m_pBase;    }private:    Base* m_pBase;};//单例模式class Singleton{public:    static Singleton* Instance()    {        if( m_instance == 0)        {            m_instance = new Singleton();        }        return m_instance;    }    void AddCount()    {        std::cout<<"count:"<<count<<std::endl;        count++;    }protected:    Singleton():count(0){}            //无法通过外部访问 只有Instance接口创建private:    static Singleton* m_instance;    //全局唯一    int count;}; Singleton* Singleton::m_instance = 0;int main(){    //模板调用方法    Factory<Derived_1> fd1;    Factory<Derived_2> fd2;    std::cout<<"template method:"<<std::endl;    fd1.Create()->print();    fd2.Create()->print();    //类型参数    TypeFactory tf;    std::cout<<"Type method:"<<std::endl;    tf.Create("Derived_1")->print();    tf.Create("Derived_2")->print();    //单例模式    Singleton *pSingle = Singleton::Instance();    pSingle->AddCount();    pSingle->AddCount();    return 0;} 

热点排行