21xrx.com
2024-12-28 13:08:49 Saturday
登录
文章检索 我的文章 写文章
C++中参数化的单例模式
2023-07-08 05:15:10 深夜i     --     --
C++ 参数化 单例模式 模板 泛型编程

单例模式是一种经常被用到的设计模式。它允许一个类只创建一个实例,并提供一个全局的访问点来获取这个实例。C++中的单例模式实现通常是通过一个全局的静态成员变量来实现。

然而,有时候我们需要带有参数的单例模式。例如,我们可能需要在创建单例对象时传递一些参数来影响单例对象的行为。在C++中,这可以通过将单例类的构造函数变成一个私有函数,并提供一个静态工厂函数来实现。

下面是一个简单的例子,展示如何使用参数化的单例模式:


class Singleton {

public:

  static Singleton& instance(int number) {

    static Singleton instance(number);

    return instance;

  }

  int number() const return m_number;

private:

  Singleton(int number) : m_number(number) {}

  int m_number;

};

int main() {

  Singleton& s1 = Singleton::instance(42);

  Singleton& s2 = Singleton::instance(123);

  std::cout << s1.number() << std::endl; // 输出: 42

  std::cout << s2.number() << std::endl; // 输出: 42

  return 0;

}

在这个例子中,我们创建了一个名为Singleton的类,并提供了一个名为instance()的静态工厂函数。这个函数接受一个int类型参数,并返回一个Singleton类的引用。

在实现中,instance()函数利用了一个静态成员变量来记录Singleton类的唯一实例。如果这个实例不存在,instance()函数会创建它并返回引用。否则,它直接返回已经创建的实例。

最后,在主函数中,我们创建了两个Singleton对象,并输出它们的number()函数返回值。由于我们始终使用相同的参数调用instance()函数,两个Singleton对象的number()函数返回值都是一样的。

总之,使用参数化的单例模式可以帮助我们更加灵活地创建单例对象,并根据需要为这些对象传递参数。这可以在某些情况下非常有用,但需要注意的是,这可能会导致代码更加复杂,因此需要根据具体情况来进行权衡。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复