c++ - 单例抽象工厂模式

标签 c++ design-patterns singleton abstract-factory

我想实现一个抽象工厂模式,但也想成为一个单例。

class WindowFactory {
protected:
    virtual Scrollbar* createScrollbar() = 0;
};

class MacWindowFactory: public WindowFactory {
    virtual Scrollbar* createScrollbar() {
        //return a instance
    }
    ;
};

class LinuxWindowFactory: public WindowFactory {
    virtual ScrollBar* createScrollbar() {
        //return a instance
    }
    ;
};

谁能帮我提供一些制作这个抽象工厂单例的示例代码?

提前致谢。

最佳答案

我想出了更优雅的解决方案(目前没有错误检查)。请让我知道你的想法

#include<iostream>
#include<map>

class AbstractFactory
{
private:
    typedef std::map< std::string, AbstractFactory* > ClientMap;
    static ClientMap s_clientMap;
public:
    void virtual createScrollbar() = 0;
    void virtual createWindow() = 0;
    static AbstractFactory* createInstance( std::string client );
protected:
    void Register( std::string, AbstractFactory* );
};

AbstractFactory::ClientMap AbstractFactory::s_clientMap;

class LinuxFactory: public AbstractFactory
{
public:
    void createScrollbar()
    {
        std::cout<<"Scrollbar for Linux"<<std::endl;
    }

    void createWindow()
    {
        std::cout<<"WIndow for Linux"<<std::endl;
    }
private:
    LinuxFactory()
    {
        Register( "Linux", this );
    }
    LinuxFactory( const LinuxFactory& );
    static LinuxFactory s_LinuxFactory;

};
LinuxFactory LinuxFactory::s_LinuxFactory;

class MacFactory: public AbstractFactory
{
public:
    void createScrollbar()
    {
        std::cout<<"Scrollbar for Mac"<<std::endl;
    }

    void createWindow()
    {
        std::cout<<"WIndow for Mac"<<std::endl;
    }

private:
    MacFactory()
    {
        Register( "Mac", this );
    }
    MacFactory( const MacFactory& );
    static MacFactory s_MacFactory;
};
MacFactory MacFactory::s_MacFactory;

void AbstractFactory::Register( std::string clientName, AbstractFactory* factory )
{
    s_clientMap.insert( ClientMap::value_type( clientName, factory ) );

}
AbstractFactory* AbstractFactory::createInstance( std::string client )
{
return s_clientMap.find( client )->second;

}

int main()
{
AbstractFactory *factory = AbstractFactory::createInstance( "Linux" );
factory->createScrollbar();
factory->createWindow();
}

关于c++ - 单例抽象工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661405/

相关文章:

c++ - 用括号括起来的逗号分隔值列表在 C 中是什么意思? a = (1, 2, 3);

C++ 构造函数继承无法正常工作

c++ - 包括 xerces C++ 的路径位置

c# - Linq to sql Repository pattern , 一些问题

c++ Meyers singleton undefined reference

c++ - 为什么 std::generate 可以与 lambda 生成器一起使用而 std::fill 不能?

design-patterns - 重构我的代码以在 Rust 中实现组合的最佳方法是什么?

java - 继承 JFrame 违反泛化

C++ _inline 在单例中被忽略并出现在我的探查器中。怎么会?

java - 单例和多线程