免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 真菜
打印 上一主题 下一主题

因为没有用Singleton模式,被人批不懂OOP! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-01-10 22:08 |只看该作者
原帖由 jonasan 于 2009-1-10 21:28 发表
楼主应该谦虚一点,我觉得你应该高兴学到了一种新的模式,而不是觉得那个engineer sb. 他觉得你不懂OOP那是他的问题,不能说别人说你什么你就不活了,是不?

我早就知道Singleton这种Stupid模式了

[ 本帖最后由 真菜 于 2009-1-11 14:31 编辑 ]

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
12 [报告]
发表于 2009-01-10 22:31 |只看该作者
原帖由 真菜 于 2009-1-10 19:20 发表

谢谢,为什么是那个SB senior工程师review我的代码




别人review你的代码,你应该感到欣慰呀!
可以少泄露BUG到测试那边。

唉.......

论坛徽章:
0
13 [报告]
发表于 2009-01-10 23:21 |只看该作者
年轻就是好

论坛徽章:
0
14 [报告]
发表于 2009-01-11 00:02 |只看该作者
SB senior提的建议还是有价值的,,不过说你不懂OOP,他也太扯淡了。。。

论坛徽章:
0
15 [报告]
发表于 2009-01-11 00:03 |只看该作者
使用Singleton还是应该的。。。
至于麻烦吗,,,还是根据实际情况处理。。。

论坛徽章:
0
16 [报告]
发表于 2009-01-11 00:06 |只看该作者
我倒是认为直接用静态变量比用singleton直观多了。

论坛徽章:
0
17 [报告]
发表于 2009-01-11 12:36 |只看该作者
原帖由 真菜 于 2009-1-10 06:08 发表

我早就知道Singleton这种SB模式了



一直看到这个回帖,不得不说一句,楼主真是无知者无畏。

论坛徽章:
0
18 [报告]
发表于 2009-01-11 14:08 |只看该作者
原帖由 emacsnw 于 2009-1-11 12:36 发表



一直看到这个回帖,不得不说一句,楼主真是无知者无畏。

Singleton确实解决了保证只有一个实例的问题,但是它解决的只是一个很容易克服的问题,却引来了很多复杂的问题。
第一:原先的调用是"remoteServer->LoadInfo()",现在却要改为"RemoteServer * instance = RemoteServer.GetInstance(); instance->LoadInfo()",所有的地方都要这么啰嗦,你不累?
第二:如何解决实例化Singleton顺序的问题,估计你从来只是写些理想环境中的TOY CODE,没在实际的复杂环境经历过,我实话实说,告罪了
第三:在多线程中的问题,你自己去上网用"Singleton 多线程"去搜索吧。

附录:我解决保证只有一个实例的问题的简单方法,实际上这只是迎合某些自以为掌握Design Pattern的engineer的,remoteServer本身就是一个全局对象,难道要获取服务器信息的人连这点都不知道吗,还要自己去重新new RemoteServer(),再调用LoadInfo()方法,STUPID!

  1. RemoteServer::RemoteServer()
  2. {
  3.        static int count;
  4.        assert(count++ == 0);
  5. }
复制代码


PS:也许你痴长我几岁,但是请别在这地方装C++大牛了,KISS,understand?

[ 本帖最后由 真菜 于 2009-1-11 14:34 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2009-01-11 14:19 |只看该作者
如果真的按照那个“senior”工程师的要求,系统中所有的global object都要用Singleton模式,在C++中怎么解决如下的问题:
要求:
1、初始化RemoteServer之前,需要先初始化Config对象
2、初始化ClientMonitor对象之前,需要先初始化RemoteServer对象
3、其他的依赖关系...
如果不用Singleton,只需要:

  1. int main()
  2. {
  3.      config = new Config();
  4.      remoteServer = new RemoteServer();
  5.      clientMonitor = new ClientMonitor();
  6. }
复制代码

一切不就结了吗?
真的担心自己会实例化RemoteServer两次的化,这里有个简单的方法

  1. RemoteServer::RemoteServer()
  2. {
  3.        static int count;
  4.        allege(count++ == 0);
  5. }
复制代码

[ 本帖最后由 真菜 于 2009-1-11 14:38 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2009-01-11 14:24 |只看该作者
楼主,不同意可以,没必要人身攻击,这属于态度问题了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP