C_and_CPP 板


LINE

p.s. BBS程式码标色工具挂了,所以只好用丑丑的手动标色了 XD 人都是八卦的,所以 1. 如果有人以一个谣言为基础,换个人名就散布谣言,用这种方法散布多了,我们叫它 Prototype Pattern 典型的作法就是 PolicyRumor* prPrototype = PolicyRumor::getPrototype(); //取得原形 Rumor* r1 = (prPrototype->clone())->setName("薄熙来"); Rumor* r2 = (prPrototype->clone())->setName("李登辉"); 你看,这不就简单地创造了两个谣言吗 2. 如果有人用一组预设的谣言为基础,提供客户很多种东西让他可以用自己的元件客制 化谣言再散布出去,我们称为Builder Pattern 这种做法就是 Rumor* r3 = (SpicyRumor::createBuilder())->setName("某男星")->setTarget("某女星")->setPlace("薇阁")->create(); 你看,简单易懂 3. 如果有个人在需要新闻的时候,找个八卦聚集地,要他们制造出一个 我需要的种类的谣言,我们称为Factory。 (当然它本意不是这样,只是看起来会是这样 XD) SportRumor* r4 = static_cast<SportRumor*>(AppleDaily::getRumorGenerator(RumorType::Sport)->createRumor()); 4. 如果有人有个固定的写手,提供一组号码跟不同分机,让每个人都可以打电话进去 提供线索,打不同分机提供不同谣言,我们称为Abstract Factory Pattern UncontainedRumor* r5 = AppleDaily::createRumor(分机号码& 分机); 老实讲3跟4很像,我也常常搞混 虽然他们意思完全天差地远 5. 如果有高层过来关切,要求我们每制造一组谣言一定要跟他们说,这种情况我们称为 Observer pattern //也许高层会希望"监测爆料"这件事情保密,所以要用private继承而非protect/public? class RumorFactory : protected HighLevelTelephoneNotify { Rumor createRumor(); virtual void attach(const HighLevel&); //连接高层用 virtual void notify(const SomeNotifyStructure&); //通知用 virtual void detach(const HighLevel&); //高层失势後断绝联络用(咦?) }; 6. 如果我们有固定的好几个线民(比方说演艺圈,政治圈等等各一个线民),用这个线 民很方便地提供很多奇怪的资讯供很多不同的杂志制造出谣言, 这种情况游民共享的情况我们叫他做Flyweight static RumorSource& rs1 = PoliticsRumorSource::getInst(); ///通常共用的东西我们用Singleton实作 static RumorSource& rs2 = ActorRumorSource::getInst(); static RumorSource& rs3 = SportRumorSource::getInst(); 某日报出刊用这三个消息来源 public DailyNews* DailyNewsFactory::createDailyNews() { return DailyNews::createFromRumor(rs1, rs2, rs3); } 某X周刊出刊一样用这三个消息来源 阿就createRumor实作有点差异而已 public TimeNews* TimeNewsFactory::createTimeNews() { return TimeNews::createFromRumor(rs1, rs2); } 说真的,他们这种作法,狠一点的我还可以写个template用policy pattern表达出来 不过这离题了 XD 7. 如果我们希望能够多听一些谣言,提供了一组可抛弃的信箱(防止收到垃圾信)来接 收这些谣言,这称为Delegate pattern class ISelectedNewsSource { //这个const还挺重要的,请务必维持这个好习惯 这很重要 //前面的boolean通常可以告诉source这次的update你还要不要继续读下去 virtual boolean onPolicyRumorFetched(const PolicyRumor&); virtual boolean onActorRumorFetched(const ActorRumor&); ... ... } class MySourceHandler : protected ISelectedNewsSource { ... ... ... } ISelectedNewsSource* source = new MySourceHandler; dailyNews.setOnPublishCallback(source); 8 最後,当我们嫌这些谣言好烦,再也不想听到这些加油添醋的讯息了,我们就可以把 Adapter/Bridge拔掉,用自己的判断去评论收到的讯息 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.192.252.25 Killercat:转录至看板 Programming 04/12 11:54
1F:→ diabloevagto:看不太懂这个八卦... 04/12 12:48
2F:→ Killercat:不过就是在说明一些design pattern运作原理而已 orz 04/12 13:12
3F:→ angleevil:= =拍谢,我功力不够.我也看不懂... 04/12 13:34
4F:→ iWRZ:怎麽看起来像Java? 04/12 13:41
5F:推 iamstudent:这篇是在讲Design Pattern,用的语言是java 04/12 13:53
6F:→ iamstudent:有点偏离本版讨论了,dp有OOAD可以讨论,java也有专版 04/12 13:54
7F:→ Killercat:我是java写多了 不过除了两个地方少了个*以外 04/12 14:04
8F:→ Killercat:这看起来应该基本上都是C++才对啊(抓头) 04/12 14:04
9F:→ Killercat:我个人因为习惯用ref来取代pointer 所以->用得比较少 04/12 14:05
10F:→ Killercat:会不会是因为这原因让你们觉得像java? 04/12 14:05
11F:→ Killercat:阿我知道为什麽了,有些地方的确写成java了 我改一下XD 04/12 14:06
12F:→ Killercat:java写多了 一些C++的东西都会不小心混进奇怪code进去 04/12 14:12
※ 编辑: Killercat 来自: 220.136.83.196 (04/12 14:35)
13F:推 purpose:可以留下 JAVA / C++ 的作法,这样符合此版,又能比对 04/12 14:42
14F:→ purpose:语言切来切去,容易搞混。这篇内容比较精链吧,我只看懂 04/12 14:44
15F:→ purpose:一点,有些前因後果原PO稍微省略了,所以罗... 04/12 14:44
16F:→ Killercat:其实这篇由来是这样的 =P 中共前阵子不是因为北京一些 04/12 14:46
17F:→ Killercat:事件以谣言为理由封锁了几个网站,我刚好跟几个geek的 04/12 14:46
18F:→ Killercat:工程师聊到这个,又刚好聊到design pattern 04/12 14:46
19F:→ Killercat:所以我就写了这篇让大家笑一下 XD 04/12 14:47
20F:→ Killercat:基本上对看不懂paattern的可能没什麽帮助(比方说第一个 04/12 14:47
21F:→ Killercat:prototype的核心就是->clone()) 看得懂的就当工程师笑话 04/12 14:47
22F:→ Killercat:看看笑笑就好了 XD 04/12 14:48
23F:→ Killercat:基本上我想用过这些pattern的应该都能会心一笑 04/12 14:48
24F:推 iWRZ:个人想问 pattern 纯C可以写出来吗? 04/12 16:56
25F:→ Killercat:我可以跟你说 struct mask是无敌的 只是好不好用 XD 04/12 17:14
26F:→ Killercat:没有人愿意用struct mask+macro模拟出一堆继承feature 04/12 17:15
27F:→ Killercat:我们可以反过来说 有什麽事malloc+memset写不出来的XD 04/12 17:15
28F:→ angleevil:有阿,被ooc逼退的头发,写不回来(认真).所以我不碰那个 04/12 17:26
29F:推 EdisonX:http://ppt.cc/;Odb 04/12 17:27
30F:推 fengchu:回应i大。patterns和程式语言的种类高度相关。在C里用函式 04/12 18:55
31F:→ fengchu:指标阵列也算是一种pattern。在functional PL里的pattern 04/12 18:55
32F:→ fengchu:与OOPL里的patterns也不太一样。 04/12 18:56
33F:推 mingtai1:第一个prototype pattern感觉常常很像template pattern.. 04/12 21:30
34F:→ Killercat:template比较类似填洞(像builder),prototype比较像是 04/12 22:22
35F:→ Killercat:你要生出一大群只差一个两个相异点的物件 04/12 22:22
36F:→ Killercat:当然你可以有很多种prototype 然後挑一个clone... 04/12 22:23
37F:推 FAITHY:好强 能知道->清楚分辨->活用 这些设计概念好厉害 ... 04/12 23:26
38F:→ Killercat:其实我想说的是,Design Pattern是一种殊途同归的结果 04/13 09:49
39F:→ Killercat:就算你没看过DP,当你很有经验的时候,你会发现你用的 04/13 09:49
40F:→ Killercat:方法会跟大多数有经验的人一样,刚好也跟DP一样 04/13 09:50
41F:→ Killercat:其实除了少部分非常高深的pattern(多半跟template有关, 04/13 09:50
42F:→ Killercat:比方说policy pattern这真的需要点才华)以外,大多数的 04/13 09:51
43F:→ Killercat:patterns(像是GOF写的那本硬壳书)都是迟早自己会写到的 04/13 09:52
44F:→ Killercat:不过这些需要才华的多半也被冠上design之名了 04/13 09:53
45F:推 tomap41017:推上面最後这段 04/13 13:50
46F:→ tomap41017:原PO写得真的很棒!推 04/13 13:50
47F:推 damody:推呀!C++无误,不过第二个的new好像没有delete 04/14 03:46
48F:→ Killercat:builder有一种做法是.create()里面delete this; 04/14 10:48
49F:→ Killercat:当然这不是一个好的写法 因为谁new应该就要谁delete 04/14 10:48
50F:→ Killercat:所以第二个应该改成::createBuilder()->...->create(); 04/14 10:49
51F:→ Killercat:createBuilder()做一个new Builder()这样 @@a 04/14 10:49
※ 编辑: Killercat 来自: 123.192.252.25 (04/14 10:52) ※ 编辑: Killercat 来自: 123.192.252.25 (04/14 10:52)
52F:推 damody:推新版本不用 delete 04/20 06:55







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP