免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1875 | 回复: 8
打印 上一主题 下一主题

[C++] 谁能用设计模式把完成下面要求,不要为设计模式而设计模式! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-26 12:42 |只看该作者 |倒序浏览
想请教一个设计模式的问题:
       用一个小事例把代理模式、观察者模式、单例模式结合在一起。 不一定要代码,我自己可以写,只要给个需求就行。 只要能把这三个设计模式合理的应用在一个小系统中就行,告诉我需求,指点一下思路就OK了。 我要做一个ISAS文档,主题就是设计模式,选了这三个设计模式(由于种种原因只能选这三种模式),希望有一比较合适(不要只是为了模式而模式)的例子,能把这三个设计模式用得恰到好处。

论坛徽章:
0
2 [报告]
发表于 2009-04-26 12:43 |只看该作者
我个人觉得,最不济就是用代理模式做数据库连接池,用单例读取配置信息。可是怎么把观察都模式用上呢?想了几个都觉得不太合适。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2009-04-26 14:14 |只看该作者
现在要作业的水平越来越高了。

论坛徽章:
0
4 [报告]
发表于 2009-04-26 15:55 |只看该作者
原帖由 flw 于 2009-4-26 14:14 发表
现在要作业的水平越来越高了。


恩恩,俺这种业余水平的,完全看不懂设计模式...

设计模式到底能解决什么问题啊

论坛徽章:
0
5 [报告]
发表于 2009-04-26 17:17 |只看该作者
原帖由 reiase 于 2009-4-26 15:55 发表
恩恩,俺这种业余水平的,完全看不懂设计模式...

设计模式到底能解决什么问题啊

我去一公司做题,这玩意儿考的很多,除了能够YY和扯淡还真想不到有什么实际用途。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2009-04-26 18:03 |只看该作者

回复 #1 meng_jian 的帖子

不知道楼主使用什么语言。
如果是C/C++, 在一个很普通的程序里面就有可能无意识的用上这3种模式。

它们也许和《设计模式》中严格描述出的样子有点偏差
但有含有其精髓

-------- 观察者--------
int atexit( void (*fn)(void) ); /* #include <stdlib.h> */
new_handler set_new_handler (new_handler new_p) throw(); // #include <new>
unexpected_handler set_unexpected (unexpected_handler f) throw(); // #include <exception>
terminate_handler set_terminate (terminate_handler f) throw(); // #include <exception>

这绝对是百分之百的观察者模式。


-------- 代理--------
class std:: vector<bool>; // #include <vector>

template<size_t n>
class std::bitset;              // #include <bitset>

这也是百分之百的代理模式。
类似的, 许多智能指针, deque的iterator,带有写时拷贝机制的string, 都是代理模式。


-------- 单例 --------
单例的用途是什么?
创建单一(或者更广泛的, 限制数量的)实例。
并有一个全局访问点。
stdin, stdout, stderr
std:: cout, std:: cin, std:: cerr, std:: clog
std:: wcout, std:: wcin, std:: wcerr, std:: wclog

程序运行环境将创建上述的单一对象(保证不会创建两个), 并有全局访问点。
它们算单例吗?


如果非要说它们是全局变量, 而不是单例,那:
char * getenv ( const char * name ); /* #include <stdlib.h> */
char * setlocale ( int category, const char * locale ); /* #include <locale.h> */

没有(或者说看不到)全局变量了吧?
显然, 它们背后依然有全局变量, 只是隐藏在函数下而已。
单例与全局变量的界限本来就很模糊。
它们算单例吗?


如果还要说, 上面的2个例子无法子类化, 那:
locale::global( local("chs" ); // #include <locale>

C++程序运行时环境会创建一个单一的全局的locale。
提供一个访问点:
static locale global (const locale& loc);
并且可以用用户自定义的locale子类去替换(或者替换某个facet)。
这个算单例吗?

嗯, 也许不算, 因为它是替换, 而不是创建
无法在创建时使用某个子类。

单例是设计模式中无聊模式之一 ……

[ 本帖最后由 OwnWaterloo 于 2009-4-26 18:05 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-04-27 09:37 |只看该作者

回复 #6 OwnWaterloo 的帖子

首先得谢谢兄弟了,看样子兄弟对设计模式有比深的研究。我C++学过一些,以前学过,最近又看《C++ Primer》,也没怎么做过东西,只是用来做过控制台的小图书馆理系统。兄弟给的讲的这些看不懂。
有java的没, 我java用得比较多。最好是生活中的例子, 我功力还没有深厚到了解语言底层实现!

[ 本帖最后由 meng_jian 于 2009-4-27 09:42 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-04-27 09:42 |只看该作者

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
9 [报告]
发表于 2009-04-27 16:13 |只看该作者

回复 #7 meng_jian 的帖子

java我不懂 ……  它的类库更不了解 ……   楼主还是去java版看看吧……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP