[分享] 人都是八卦的,所以...

看板Programming作者 (殺人貓™)時間12年前 (2012/04/12 11:54), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板 #1FXSckDL ] 作者: Killercat (殺人貓™) 看板: C_and_CPP 標題: [分享] 人都是八卦的,所以... 時間: Thu Apr 12 02:13:00 2012 p.s. BBS程式碼標色工具掛了,所以只好用醜醜的手動標色了 XD 人都是八卦的,所以 1. 如果有人以一個謠言為基礎,換個人名就散佈謠言,用這種方法散佈多了,我們叫它 Prototype Pattern 典型的作法就是 Rumor r1 = (PoliticsRumor.clone()).setName("薄熙來"); Rumor r2 = (PoliticsRumor.clone()).setName("李登輝"); 你看,這不就簡單地創造了兩個謠言嗎 2. 如果有人用一組預設的謠言為基礎,提供客戶很多種東西讓他可以用自己的元件客制 化謠言再散佈出去,我們稱為Builder Pattern 這種做法就是 Rumor r3 = (new SpicyRumor.Builder()).setName("某男星").setTarget("某女星").setPlace("薇閣").create(); 你看,簡單易懂 3. 如果有個人在需要新聞的時候,找個八卦聚集地,要他們製造出一個 我需要的種類的謠言,我們稱為Factory。 (當然它本意不是這樣,只是看起來會是這樣 XD) SportRumor r4 = (SportRumor) SystemManager.getRumorGenerator(Rumor.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(); //連接高層用 virtual void notify(SomeNotifyStructure&); //通知用 virtual void detach(); //高層失勢後斷絕聯絡用(咦?) }; 6. 如果我們有固定的好幾個線民(比方說演藝圈,政治圈等等各一個線民),用這個線 民很方便地提供很多奇怪的資訊供很多不同的雜誌製造出謠言, 這種情況遊民共享的情況我們叫他做Flyweight static RumorSource rs1 = PoliticsRumorSource.getInst(); ///通常共用的東西我們用Singleton實作 static RumorSource rs2 = ActorRumorSource.getInst(); static RumorSource rs3 = SportRumorSource.getInst(); 某日報出刊用這三個消息來源 public DailyNews DailyNewsFactory::createDailyNews() { return DailyNews::createRumor(rs1, rs2, rs3); } 某X周刊出刊一樣用這三個消息來源 阿就createRumor實作有點差異而已 public TimeNews TimeNewsFactory::createTimeNews() { return TimeNews::createRumor(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 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: Killercat (220.136.83.196), 時間: 04/12/2012 11:54:16

05/14 04:08, , 1F
:))
05/14 04:08, 1F
文章代碼(AID): #1FXb7gl3 (Programming)