游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4281|回复: 8

再贴网络服务器设计用到的设计模式1:单体类。

[复制链接]

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2004-10-18 16:16:00 | 显示全部楼层 |阅读模式
设计模式书上这样说的。

class Singleton
{
static *instance()
{
  if(_instance) return _instance;
return new Singleton;
}
private:
static singleton *_instance;
}

这里为什么用指针而不是直接生成一个实例,书上的解释是:1,不知道是不是一定会用到这个,所以不在一开始就生成。浪费了内存和一个初始化函数

所以假如我们没有这个限制的话,就可以直接放个实例了。
class DataBase
{
static DataBase &instance()
{
return _instance;
}
private:
static Database _instance;
}
这个做法是静态数据区多了用一些空间。
假如我们这个初始化函数想让他第一次用到的时候再初始化,那么可以。
class DataBase
{
static DataBase &instance()
{
static Database _instance;
return _instance;
}
}
但由于某些原因,第二种也不一定会在一开始初始化。

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2004-10-18 17:04:00 | 显示全部楼层

Re:再贴网络服务器设计用到的设计模式1:单体类。

这样写并不一定能做到singleton的说。因该写成
class Singleton
{
public:
static *instance()
{
  if(_instance) return _instance;
return new Singleton;
}
protected:
     Singleton();
private:
static singleton *_instance;
}

应该把构造函数也写成protected,避免意外的多实例

0

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2004-11-12 18:08:00 | 显示全部楼层

Re: 再贴网络服务器设计用到的设计模式1:单体类。

是不是很专业的服务器用的,像网游的服务器都用到吗,还是有更好的,这是不是很难啊都看不懂 [em7] [em7

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-11-15 14:38:00 | 显示全部楼层

Re:再贴网络服务器设计用到的设计模式1:单体类。

我是新人,有点疑惑
static *instance()
{
  if(_instance) return _instance;
return new Singleton;
}
是不是应该改成
static *instance()
{
  if(! _instance)
    _instance = new Singleton;
return _instance;
}

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
 楼主| 发表于 2004-11-15 16:02:00 | 显示全部楼层

Re:再贴网络服务器设计用到的设计模式1:单体类。

yes, U R right

96

主题

146

帖子

146

积分

注册会员

Rank: 2

积分
146
发表于 2004-11-15 19:45:00 | 显示全部楼层

Re:再贴网络服务器设计用到的设计模式1:单体类。

多线程呢?既然是服务器,没可能不考虑多线程吧

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-11-16 04:14:00 | 显示全部楼层

Re:再贴网络服务器设计用到的设计模式1:单体类。

多线程的标准写法是这样的:

static *instance()
{
    if(! _instance)
    {
        mutex.lock();
        if(!_instance)
            _instance = new Singleton;
        mutex.unlock();
    }
    return _instance;
}
check两次就好了。

96

主题

146

帖子

146

积分

注册会员

Rank: 2

积分
146
发表于 2004-11-16 10:15:00 | 显示全部楼层

Re:再贴网络服务器设计用到的设计模式1:单体类。

资源释放呢?

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2004-11-16 10:29:00 | 显示全部楼层

Re:再贴网络服务器设计用到的设计模式1:单体类。

singleton一般不需要释放,扮演的是类似daemon的角色,当然你也可以释放。
结束进程的时候,把所有的singleton的instance都delete就好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 07:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表