顯示具有 OOA 標籤的文章。 顯示所有文章
顯示具有 OOA 標籤的文章。 顯示所有文章

2011年5月10日 星期二

Design Principle - Open Close Principle

前言
本文要介紹的OCP,不是指證照考試中的Oracle Certified Professional,
而是OOD(物件導向設計)中的Open Close Principle(開放封閉原則)。

精神
系統的變動幾乎是必然的(沒有一成不變的系統,因為使用者是善變的),
開放封閉原則的精神在於面對系統的變動時,儘量不要修改既存的程式碼,
而是增加新的模組、類別來處理系統的變更。

2011年4月20日 星期三

Design Pattern - Prototype

Prototype Pattern顧名思義,
就是定義出一個prototype(原型),
然後利用這個原型,來產生物件。
產生的方式不同於Factory Pattern中使用的new,
而是利用clone(複製)。

因此,在介紹Prototype pattern之前,得先了解何謂clone。

2011年4月19日 星期二

Design Pattern - Factory

Factory Pattern(工廠模式),在某些介紹中,會被稱為Simple Factory Pattern(簡單工廠模式),
看到名稱,就知道這個模式非常的簡單,很可能閣下已經不知不覺地使用工廠模式很多年了。
在介紹此模式之前,我們先來看一個沒有套用工廠模式的例子,然後設法將這個例子加以修改成工廠模式。

2011年4月18日 星期一

Design Pattern - Bridge

本文要介紹的是bridge pattern(橋樑模式、橋接器模式、橋模式),
其精神在於降低abstraction和implementor之間的coupling(耦合度)
讓abstraction在延伸子類別時,
不用擔心因為implementor的改變,而須修改子類別的程式碼。
接下來,使用正反兩個例子來說明bridge pattern。

要設計Android上的遊戲叫做AngryBee,要怎麼做呢?

2011年4月13日 星期三

Design Pattern - Template Method

簡介

template method(範本方法)顧名思義,
就是定義好method的內容,當作範本,讓其他程式使用。
也就是說,利用抽象類別宣告要供子類別實作的method,
然後在不能夠被繼承的(例如final)method中呼叫須被實作的method。
這個final method就是所謂的template method。

其精神即透過繼承(inheritance)的方式,讓子類別能夠實作不同的邏輯區塊,
然後在父類別的final method中,依相同順序執行不同區塊的邏輯。

如此一來,不同的子類別,能夠實作各自的方法細節,
然後統一利用父類別的final method,來執行任務。

讓我們用例子,來解釋template method pattern.

範例說明

2011年4月12日 星期二

Design Principle - Liskov's Substitution Principle (LSP)

簡介

LSP指得是在程式中使用base class(基礎類別)的地方,
都能夠改用其derived class(沿生類別),
而且不會讓程式出現非預期的結果(例如RuntimeException),
也不會影響程式原本的功能。

亦即,derived class能夠做為base class的substitution(替代品)。

反面範例

最常見的例子,就是正方形與矩形之間的關係。

數學上來說,正方形是一種(is-A)矩形,

假設有個數學系統,
須新增一個能夠計算矩形面積的程式,
會直覺地設計成:

2011年4月10日 星期日

Design Principle - Interface Segregation Principle (ISP)

ISP除了有Interface Segregation Principle也就是介面分離原則外,
當然最為大家熟知的就是Internet service provider,也就是網際網路服務提供者,
這裡要介紹的當然不會是後者,而是OO(物件導向)設計原則中的ISP。

所謂的ISP,就是希望programmer在設計介面時,能夠考慮到介面中的方法,是否要放在同一個介面。

請見以下的例子: