2008年11月10日 星期一

heap 跟 stack

這東西以前可能有學過吧,不過整個忘掉了,重新復習ㄧ下

在用ClassT object的時候
是將資料放在stack上

而用ClassT* object = new ClassT()的時候
則是將資料放在heap上

stack的好處是不用清理,離開function後自動清掉
不過會怕overflow
也可以使用alloca來配置記憶體

heap則是動態的利用malloc/free或是new/delete來處理

2008年11月6日 星期四

命令模式

將request命令的物件與執行命令的物件之間鬆綁
而一個命令物件封裝了一個或一組東做
命令還可以被復原,就是實踐一個undo(),用來逆向execute()做的事情

2008年11月3日 星期一

工廠模式(factory)

簡單工廠:
不是設計模式
只是一個常用的方法
將實體化的程式移到另一個factory class

工廠方法:
將實體化留到繼承的子類別來決定
(一個抽象的方法來作實體化 , 子類別要實行這個方法)
這邊的決定不是指runtime時期決定
而是指選用不同子類別時,就等於選用不同實體
不同的實體化可以經由繼承後覆寫不同的實體化方法來進行


抽象工廠:


抽象工廠訂定一個介面,所有實體工廠都得實踐這介面

獨體模式(Singleton)

在一些只需要一個實體的場合

將建構子設為private
且用另一個static function來call 建構子
並將pointer記錄在一個static的指標

另外由於因應multi thread
有三種解決方法

1. 同步化 getInstance()

2.改成率先實體化()

3. 雙重檢查上鎖() (block synchronized)