[分享] 人都是八卦的,所以...
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
→
04/12 12:48, , 1F
04/12 12:48, 1F
→
04/12 13:12, , 2F
04/12 13:12, 2F
→
04/12 13:34, , 3F
04/12 13:34, 3F
→
04/12 13:41, , 4F
04/12 13:41, 4F
推
04/12 13:53, , 5F
04/12 13:53, 5F
→
04/12 13:54, , 6F
04/12 13:54, 6F
→
04/12 14:04, , 7F
04/12 14:04, 7F
→
04/12 14:04, , 8F
04/12 14:04, 8F
→
04/12 14:05, , 9F
04/12 14:05, 9F
→
04/12 14:05, , 10F
04/12 14:05, 10F
→
04/12 14:06, , 11F
04/12 14:06, 11F
→
04/12 14:12, , 12F
04/12 14:12, 12F
※ 編輯: Killercat 來自: 220.136.83.196 (04/12 14:35)
推
04/12 14:42, , 13F
04/12 14:42, 13F
→
04/12 14:44, , 14F
04/12 14:44, 14F
→
04/12 14:44, , 15F
04/12 14:44, 15F
→
04/12 14:46, , 16F
04/12 14:46, 16F
→
04/12 14:46, , 17F
04/12 14:46, 17F
→
04/12 14:46, , 18F
04/12 14:46, 18F
→
04/12 14:47, , 19F
04/12 14:47, 19F
→
04/12 14:47, , 20F
04/12 14:47, 20F
→
04/12 14:47, , 21F
04/12 14:47, 21F
→
04/12 14:48, , 22F
04/12 14:48, 22F
→
04/12 14:48, , 23F
04/12 14:48, 23F
推
04/12 16:56, , 24F
04/12 16:56, 24F
→
04/12 17:14, , 25F
04/12 17:14, 25F
→
04/12 17:15, , 26F
04/12 17:15, 26F
→
04/12 17:15, , 27F
04/12 17:15, 27F
→
04/12 17:26, , 28F
04/12 17:26, 28F
推
04/12 17:27, , 29F
04/12 17:27, 29F
推
04/12 18:55, , 30F
04/12 18:55, 30F
→
04/12 18:55, , 31F
04/12 18:55, 31F
→
04/12 18:56, , 32F
04/12 18:56, 32F
推
04/12 21:30, , 33F
04/12 21:30, 33F
→
04/12 22:22, , 34F
04/12 22:22, 34F
→
04/12 22:22, , 35F
04/12 22:22, 35F
→
04/12 22:23, , 36F
04/12 22:23, 36F
推
04/12 23:26, , 37F
04/12 23:26, 37F
→
04/13 09:49, , 38F
04/13 09:49, 38F
→
04/13 09:49, , 39F
04/13 09:49, 39F
→
04/13 09:50, , 40F
04/13 09:50, 40F
→
04/13 09:50, , 41F
04/13 09:50, 41F
→
04/13 09:51, , 42F
04/13 09:51, 42F
→
04/13 09:52, , 43F
04/13 09:52, 43F
→
04/13 09:53, , 44F
04/13 09:53, 44F
推
04/13 13:50, , 45F
04/13 13:50, 45F
→
04/13 13:50, , 46F
04/13 13:50, 46F
推
04/14 03:46, , 47F
04/14 03:46, 47F
→
04/14 10:48, , 48F
04/14 10:48, 48F
→
04/14 10:48, , 49F
04/14 10:48, 49F
→
04/14 10:49, , 50F
04/14 10:49, 50F
→
04/14 10:49, , 51F
04/14 10:49, 51F
※ 編輯: Killercat 來自: 123.192.252.25 (04/14 10:52)
※ 編輯: Killercat 來自: 123.192.252.25 (04/14 10:52)
推
04/20 06:55, , 52F
04/20 06:55, 52F