Singleton继承,好不好?

疯哥哥 2009-02-11 08:34:20
这个问题发在Gameres上一天都没有人回..所以就发这里来了.

有一个类factory,是一个singleton单件,singleton用模板实现.
class factory : public signleton<factory>
{...};

现在想写一个manager,从factory继承过来...
class manager : public factory
{...};
意思就是想让manager可以直接创建出某种实例.manager还有其他的管理功能.

程序里只有一个manager单件,它包含了factory的所有功能,故程序中不创建factory单件,
但是 我的想法是让facotry::getSingletonPtr(),facotry::createSingleton()得到的是一个manager指针.这些是实现细节,稍后再作讨论


现在想问一下:
1.signleton 被继承,这样做好不好?

2.manager具有工厂功能,负责创建实例.从概念上看,是不是个好的注意(设计)? 管理者manager和创建者factory是否需要分开?

哪位大大可能帮忙解答疑惑,或者给一点建议,小弟不胜感激.
...全文
205 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯哥哥 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 baihacker 的回复:]
引用 5 楼 Crazii 的回复:
回1楼,因为manager也是一个factory啊.我的意思是factory::getSingletonPtr()得到一个factory指针,但实际上是一个manager实例.呵呵
我的想法是manager::getSingletonPtr() 得到的指针,和factory::getSingletonPtr()得到得指针都指向同一个实例.
这样能维持系统的单件~

manager拥有factory?
manager使用factory?
manager知道一个factory?
factory是manager的一部分?
[/Quote]

class manager public factory...
baihacker 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Crazii 的回复:]
回1楼,因为manager也是一个factory啊.我的意思是factory::getSingletonPtr()得到一个factory指针,但实际上是一个manager实例.呵呵
我的想法是manager::getSingletonPtr() 得到的指针,和factory::getSingletonPtr()得到得指针都指向同一个实例.
这样能维持系统的单件~
[/Quote]
manager拥有factory?
manager使用factory?
manager知道一个factory?
factory是manager的一部分?
CodeSpy 2009-02-11
  • 打赏
  • 举报
回复
1:好
2:"...manager还有其他的管理功能...让facotry::getSingletonPtr(),facotry::createSingleton()得到的是一个manager指针"。有点乱~_~
疯哥哥 2009-02-11
  • 打赏
  • 举报
回复
回1楼,因为manager也是一个factory啊.我的意思是factory::getSingletonPtr()得到一个factory指针,但实际上是一个manager实例.呵呵
我的想法是manager::getSingletonPtr() 得到的指针,和factory::getSingletonPtr()得到得指针都指向同一个实例.
这样能维持系统的单件~
jackzhhuang 2009-02-11
  • 打赏
  • 举报
回复
我觉得可以啊。
机智的呆呆 2009-02-11
  • 打赏
  • 举报
回复
个人感觉,signleton 被工厂继承,如果整个模块中创建对象的工厂只有一个的话,那么工厂是signleton的话 是很不错的
cppfaq 2009-02-11
  • 打赏
  • 举报
回复
manager和factory之间应该是has-a更好一些吧。
继承单态类虽然可以实现,但是似乎就违反了单态本来的目的。
比如下面这个代码就很容易让人误解:
#include <iostream>
#include <string>
using namespace std;

class base
{
protected:
base(){}
base(const base&){}
base& operator=(const base&){}

public:
static base* getinstance()
{
static base inst;
return &inst;
}
};

class derived : public base
{
private:
derived(){}
derived(const derived&b):base(b){}
derived& operator=(const derived&){}

public:
static derived* getinstance()
{
static derived der;
return &der;
}
};

int main()
{
base* b1 = base::getinstance();
base* d1 = derived::getinstance();
cout << b1 << endl;
cout << d1 << endl;

system("pause");
return 0;
}



baihacker 2009-02-11
  • 打赏
  • 举报
回复
class manager : public signleton<manager>
{
use factory signleton
};

但是 我的想法是让facotry::getSingletonPtr(),facotry::createSingleton()得到的是一个manager指针

为什么要这样?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧