聽起來 singleton 跟 generic 好像搭不上邊, 不過搭配 .net framework 2.0 的 generic 機制, 倒是可以讓 singleton 好做很多... 我先簡單寫一下不使用 generic 時的做法...
只有單一 class 要實作 singleton 很簡單, 只要寫這樣的 code 就可以:
7 public class SampleSingletonClass
8 {
9 private static SampleSingletonClass _instance = null;
10 public static SampleSingletonClass Instance
11 {
12 get
13 {
14 if (_instance == null)
15 {
16 _instance = new SampleSingletonClass();
17 }
18
19 return _instance;
20 }
21 }
22
23 private SampleSingletonClass()
24 {
25 //
26 // ToDo: constructor code here.
27 //
28 }
29 }
很標準的 code, 不是嗎? 不過問題來了... 當我有第二個 class 也要套用 singleton patterns 時, 幾乎一樣的 code 就得再抄一次, 只因為 public static XXX Instance; 這個 static property 的型別不一樣, 很討厭...
這堆看起來差不多的 code 想要省掉, 那只好動點手腳, 用繼承的技術解決, 不過問題又來了, 型別的宣告... 就像一堆 Collection 物件一樣, 傳回型別宣告為 object 就好了, 不過這樣的 code 用起來實在麻煩... 寫起來就像這樣:
8 public class SingletonBase
9 {
10 public static SingletonBase Instance(Type seed)
11 {
12 if (_singleton_storage[seed] == null)
13 {
14 _singleton_storage[seed] = Activator.CreateInstance(seed);
15 }
16
17 return _singleton_storage[seed] as SingletonBase;
18 }
19
20 private static Hashtable _singleton_storage = new Hashtable();
21 }
22
23 public class SingletonBaseImpl1 : SingletonBase
24 {
25 public SingletonBaseImpl1()
26 : base()
27 {
28 Console.WriteLine("SingletonBaseImpl1.ctor() called.");
29 }
30 }
31
32 public class SingletonBaseImpl2 : SingletonBase
33 {
34 public SingletonBaseImpl2()
35 : base()
36 {
37 Console.WriteLine("SingletonBaseImpl2.ctor() called.");
38 }
39 }
看來不怎麼漂亮? 不過看在重複的 code 只寫一次就好的份上, 醜一點關起門來就看不到了. 不過這樣就沒事了? 不... 用起來更醜... [:'(]
11 SingletonBase.Instance(typeof(SingletonBaseImpl1));
12 SingletonBase.Instance(typeof(SingletonBaseImpl1));
13 SingletonBase.Instance(typeof(SingletonBaseImpl1));
14
15 SingletonBase.Instance(typeof(SingletonBaseImpl2));
16 SingletonBase.Instance(typeof(SingletonBaseImpl2));
17 SingletonBase.Instance(typeof(SingletonBaseImpl2));
實在無法接受這種 quality 的 "class library" ... 這種 code 看起來一點美感都沒有, 就像文筆不好的人在寫文章一樣...
處女座的個性, 實在不能容忍這種 code 出現在我的 project 裡... 碰到這種問題, 直覺的解決辦法就是:
不過要實作還沒那麼簡單, 試了半天, 總算找出一種看起來最得意的解法... <待續>
最近裝了台 PC, 灌了 MCE 2005 ... 用起來只有一個字... 爽!!!
最近台灣引進了 TiVo 這套系統, 應該不少人聽過吧? PC + TV card + MCE2005 就是像 TiVo 這樣子的東西, 只不過都是 Microsoft 靠一堆軟體弄的... 不用額外買專用的機器, 也不用像 TiVo 要付月租費...
用起來如何? 就是用電腦看電視而以, 我沒有接在電視上, 而是直接用 LCD monitor 看, 爽度差了點, 不過我也習慣了, 我們家都是用 monitor 在看電視... 哈哈. 用 MCE 跟一般 TV card 付的軟體看電視, 差別蠻大的... 我列幾個我覺的特別好用的地方:
其它當然有一堆好處, 我就不提了, 反正我也用不到... 如果以後買了 LCD TV, 我一定要擺台電腦在旁邊.. [:D]
抓幾張畫面...
節目表... 左下角會用PIP方式顯示目前正在播放的節目畫面..
播放畫面, 我錄的 "超人特攻隊" ... 它的操作界面都是特別針對電視能看的清楚的畫面, 還有都是能搭配搖控器操作... keyboard / mouse 不是必需品.
選台時下方會出現的頻道 and 節目資訊..
Orz, 這篇是勸敗文嘛...
期待了半天的G7, 等著把用了多年的G2換掉的新機, 沒想到這麼令人失望...
早就有要換掉G2的打算了, 不過一直找不到合適的機種, G2其實我用的很滿意, 只是有些地方還是可以改進改進...
不過想要保留的優點有:
之前認真的考慮過 Canon S3 IS, 不過缺了 (1), 其它都還可以接受, 就這樣龜下來了, 想說還是等 G 系列的出來再說吧, 沒想到這次 G7 改了一堆, 跟本不像 G 系列了...
缺點 (1) 還在, (2) (3) 沒了, 而優點 (2) (3) (4) (5) 全沒了, 額外多的好處都是對我不大重要的...
看了真是 Orz, 看來我要換的話, 目前最合適的機種還是 Canon PowerShot S3 IS 吧... G7 就不考慮了, G8 ? 看看我撐不撐的到 G8 現身.. 哈哈.. 反正這篇沒啥目的, 純脆發發牢騷用的, 我都是隨時鎖定要買的東西, 不過啥時買? 就看啥時有敗家的衝動了...
看起來真不錯啊, 感謝小熊子提供情報, 這樣用起來真舒服...
像 e-mail 一樣, 打完之後直接傳到網站上... Web based HTML editor 做的再好, 就是不如一個簡單的 editor ap 方便..
補張圖爽一下... [H]
上禮拜在公司跟同事討論事情時, 一個失手桌上喝一半的御茶園就倒在 X31 臉上.. Orz, 當時公司沒雞絲可以搶救, 就立刻把水倒出來 & 搽乾就跑回家了...
回家後災難才開始.. 一開始是開不了機, 拆開用吹風機吹乾就正常了, 不過用了沒多久, 硬碟就發生怪叫, 再拆一次才發現硬碟的電路板進水沒擦到...
還好硬碟擦乾後也正常了, 不過資料卻毀了, 開不了機, 用USB接到別台也讀不出來, my god... 挖出舊的 40GB HDD 出來重灌撐著用, 同時掛了的硬碟也接到 PC 上用 Final Data 救資料..
跑了兩天, 資料總算是救回來, 系統也都恢復正常了, 不過小黑最引以為傲的鍵盤... 因為進水, 乾了之後打起來都卡卡的, 有的像是裡面卡了沙子, 按起來卡卡的... 有的像鞋底黏到口香糖, 按下去跳不起來 [:'(]
這種 ThinkPad 怎麼用啊... 去 IBM 網站看, 自費換鍵盤要價 3650 NTD .. 土匪... 到 PCHome 看到英文的 (沒有印注音的字樣) 一片 "只要" 2300 NTD, 當場就刷了下去..
原本就是等寄來就沒事了, 不過 pchome 竟然打來說沒貨 ( [:@] 上面寫庫存正常是寫假的嘛.. ), 要訂貨, 得等一個禮拜... 不等也不行, 就說 ok .. 隔天跟肉包聊到這件事, 他講去Y拍找找, 我才想到 "對喔, 怎麼沒想到.." ... 順手找了一下, 竟然有耶... 而且一片 "只要" 1500 NTD ...
誰叫我不小心打翻飲料, 當年 X23 因為這樣花了 29xx 元去 IBM 換... 現在 1500 可以解決就偷笑了, 在公司下標, 隔天就收到貨了, 差點多花了 800 冤枉錢...
現在總算一切搞定了 [:D], 新鍵盤真好打, 不過這片鍵盤還是跟原來的有點不一樣, 應該是給早期 X30 用的料號吧... 不管它了, 沒差多少, 貼幾張圖看看
舊的鍵盤 | 新的鍵盤 |
看起來我比較喜歡英文的這片... 乾淨多了, 那個 "ThinkPad" 的鈕看起來也比較順眼... 少了注音大概就沒有人會想來用我的電腦... 不過最重要的是, 以往 ThinkPad Keyboard 的手感又回來了.. [:'(]