2009年4月17日

Design Patterns

最近使用 silverlight 撰寫一些程式,在規劃模組時,覺得有點生疏,所以把 Head First Design Patterns 這本書拿來複習一下。 為了方便以後可以經常檢視自己的設計,乾脆把重點記錄一下。
  1. Strategy Pattern (策略模式): 把程式中需要更動的部分獨立出來,例如不同鴨子的飛行與叫聲,可以拆成兩個不同的介面。 不要用繼承方式,而要用 composition 方式來處理。
  2. Observer Pattern (觀察者模式): 提出一對多關係,以及 loose coupling 的意義。 出版者稱為Subject,訂閱者稱為 Observer。Subject 提供 register, remove, motify Observer 的 method, 而 observer 則是提供 update method 給 Subject。 這本書舉了一個氣象觀測的例子,提供目前資訊、統計以及預報看板。
  3. Decorator Pattern (觀察者模式): 每個元件都可以單獨使用,或被其他的裝飾者包起來使用。'裝飾者'可以在乎叫其'被裝飾者'之前或之後加上自己的行為。 作者舉了一個星巴茲咖啡的例子,不過我覺得這個例子,會讓不懂咖啡的人搞得頭暈。 在處理 IO Stream 時,經常會用到這樣的技術,例如把 File Stream 丟給 Text File Stream, 而增加了處理文字內容的功能,我想大概是這樣吧。 我曾經把這個 pattern 應用在通訊封包加解密的處理,但是覺得處理得不理想,因為當封包收得不夠完整時,必須將不完整封包的前半段存在 buffer 中,這會讓後續的處理變得不太直覺。
  4. Factory Pattern (工廠模式): 把建立一堆類似的物件,獨立成一個 class,然後以字串或代碼來對應,建立後傳回 interface。這樣可以把可能不斷新增的類似物件,加入這個工廠,而不會影響到其它的程式。 我經常利用這個 pattern 來設計 UI 或處理通訊封包。當我把寫好的工廠,放到 API 時,使用工廠的 AP 還可以利用 Decorator Pattern 來延伸新的工廠。
  5. Singleton Pattern (獨體模式): Singleton pattern 可以確保一個類別只有一個實體。把建構式宣告成 private,並利用用 public static GetInstance() 的第一次呼叫來建立唯一的實體。可以應用在 thread pool, catche, registry object 等。
  6. Command Pattern (命令模式): 這個模型是將「發出需求的物件」和「接受與執行這些需求的物件」分割開來。發出命令與執行命令的中間,必須要先宣告一個 ICommand 的物件,使發出命令物件只看到單純的 ICommand 介面,然後再由不同的 ICommand 來連接多樣性的執行物件。 書中使用了一個可以控制家中所有家電的遙控器為例子,簡單清楚。而我經常將 command pattern 應用在通訊封包的傳送處理。
...

Deploying Vue & .NET with Google OAuth on GCP Cloud Run

Deploying Vue & .NET with Google OAuth on GCP Cloud Run Deploying Vue & .NET with Google OAuth on GCP Cloud Run...