Singleton Pattern
單例模式
使用時機:
希望確保一個類別只能有一個實體時使用。
懶漢式要點:
1. 類別內宣告一個本身型別的 private static 變數(本例為 theInstance)
2. private 建構子(所以只能由自己 new 實體出來)
3. 建立一個 public static 的 getInstance 方法,如果 theInstance 為空則 new 出一個實體給 theInstance 並 return (若不為空就直接 return theInstance)
4. 用戶端就透過 getInstance 方法獲得該類別實體
餓漢式要點:(靜態初始化)(目的在解決執行緒安全問題)
1. 類別不可被繼承
2. private static 變數(本例為 theInstance),宣告時就 new 一個本身型別實體,同時要設成唯讀
3. 其它部分同懶漢式
維基百科關於Singleton Pattern的說明(英文)
維基百科關於Singleton Pattern的說明(中文)
Here is my technical notes. If any comments or errors, please feel free to give feedbacks.
標籤雲
Android
(59)
ActionScript
(52)
PHP
(14)
JavaScript
(11)
設計模式
(10)
CSS與Html
(8)
Flex
(7)
Material Design
(6)
frameworks
(5)
工具
(5)
串流影音
(4)
通用
(4)
DB
(3)
FlashRemoting
(3)
Java
(3)
SQL
(3)
Mac 操作
(2)
OpenGL ES
(2)
PureMVC
(2)
React Native
(2)
jQuery
(2)
AOSP
(1)
Gradle
(1)
XML
(1)
軟體設定
(1)
搜尋此網誌
2009/07/21
2009/07/18
設計模式小筆記-Builder Pattern
標籤:
設計模式
Builder Pattern
建造者模式
使用時機:
把一個複雜物件的各部分拆開,使各部分可以有不同的實作方式
要點:
1. 定義一個 Builder 的 interface,包含每個單一功能(或元件)的抽象方法,然後用一個子類別實作它
2. 定義一個 Director 類別,裡面有一個存放 Builder interface 實體的變數,還有一個方法用來呼叫適當 Builder 子類別裡的方法
(Builder 子類別負責生產零件;Director 類別負責組合零件)
3. 用戶端透過 Director 類別去產生適合的 Builder 子類別,再呼叫 Director 類別裡的方法讓 Builder 子類別負責把各功能(或元件) 產生出來
維基百科關於Builder Pattern的說明(英文)
維基百科關於Builder Pattern的說明(中文)
建造者模式
使用時機:
把一個複雜物件的各部分拆開,使各部分可以有不同的實作方式
要點:
1. 定義一個 Builder 的 interface,包含每個單一功能(或元件)的抽象方法,然後用一個子類別實作它
2. 定義一個 Director 類別,裡面有一個存放 Builder interface 實體的變數,還有一個方法用來呼叫適當 Builder 子類別裡的方法
(Builder 子類別負責生產零件;Director 類別負責組合零件)
3. 用戶端透過 Director 類別去產生適合的 Builder 子類別,再呼叫 Director 類別裡的方法讓 Builder 子類別負責把各功能(或元件) 產生出來
維基百科關於Builder Pattern的說明(英文)
維基百科關於Builder Pattern的說明(中文)
2009/07/13
設計模式小筆記-Facade Pattern
標籤:
設計模式
Facade Pattern
外觀模式
使用時機:
化繁為簡,建立操作子系統的簡單介面
原有系統難以維護和擴展時
要點:
1. 建立一個外觀類別,並再其內定義一些操作的方法,以簡化依賴與複雜性
2. 用戶端不需直接操作各類別,只要透過外觀類別提供的方法即可
維基百科對於 Facade Pattern 的說明(英文)
維基百科對於 Facade Pattern 的說明(中文)
外觀模式
使用時機:
化繁為簡,建立操作子系統的簡單介面
原有系統難以維護和擴展時
要點:
1. 建立一個外觀類別,並再其內定義一些操作的方法,以簡化依賴與複雜性
2. 用戶端不需直接操作各類別,只要透過外觀類別提供的方法即可
維基百科對於 Facade Pattern 的說明(英文)
維基百科對於 Facade Pattern 的說明(中文)
設計模式小筆記-Template Method Pattern
標籤:
設計模式
Template Method Pattern
範本方法模式
使用時機:
制訂一些規格讓子類別遵守,減少程式碼重複,而子類別可用不同方式去實作方法。
要點:
1. 定義一個 abstract 父類別,把子類別都要用到的功能定義進去
2. 子類別繼承並實做父類別的方法
3. 用戶端用父類別型別變數存放子類別實體,再呼叫其方法
維基百科關於 Template Method Pattern 的說明(英文)
維基百科關於 Template Method Pattern 的說明(中文)
範本方法模式
使用時機:
制訂一些規格讓子類別遵守,減少程式碼重複,而子類別可用不同方式去實作方法。
要點:
1. 定義一個 abstract 父類別,把子類別都要用到的功能定義進去
2. 子類別繼承並實做父類別的方法
3. 用戶端用父類別型別變數存放子類別實體,再呼叫其方法
維基百科關於 Template Method Pattern 的說明(英文)
維基百科關於 Template Method Pattern 的說明(中文)
設計模式小筆記-Prototype Pattern
標籤:
設計模式
Prototype Pattern
原型模式
使用時機:
有複製物件的功能需求時
要點:
1. 建立抽象父類別,內有一個 return 此父類別的 clone 方法
2. 子類別實作 clone 方法(在 .NET 裡只要實做 Icloneable 就可以,第一步可省略)
3. 用戶端可呼叫子類別的 clone 方法複製出一個相同的子類別
維基百科上關於 Prototype Pattern 的說明(英文)
維基百科上關於 Prototype Pattern 的說明(中文)
原型模式
使用時機:
有複製物件的功能需求時
要點:
1. 建立抽象父類別,內有一個 return 此父類別的 clone 方法
2. 子類別實作 clone 方法(在 .NET 裡只要實做 Icloneable 就可以,第一步可省略)
3. 用戶端可呼叫子類別的 clone 方法複製出一個相同的子類別
維基百科上關於 Prototype Pattern 的說明(英文)
維基百科上關於 Prototype Pattern 的說明(中文)
2009/07/10
設計模式小筆記-Factory Method Pattern
標籤:
設計模式
Factory Method Pattern
工廠方法模式
使用時機:
改良簡單工廠模式,缺點為所需建立的類別更多
要點:
1. 先建立一個工廠的 interface 內有一個可以 return 所需類別的方法
2. 工廠子類別繼承自 interface,實作的方法可以 return 適當的類別
3. 這些被 return 的類別也要一一建立,並且都有一個同名的操作方法供呼叫
4. 用戶端用工廠的 interface 為變數型態,先 new 出適當的工廠子類別,再呼叫其內的方法 return 回適當的操作類別
5.該操作類別就可呼叫其內的方法,以後修改時在用戶端只需修改 new 出適當的工廠子類別的地方即可
維基百科對於 Factory Method Pattern 的描述(英文)
維基百科對於 Factory Method Pattern 的描述(中文)
工廠方法模式
使用時機:
改良簡單工廠模式,缺點為所需建立的類別更多
要點:
1. 先建立一個工廠的 interface 內有一個可以 return 所需類別的方法
2. 工廠子類別繼承自 interface,實作的方法可以 return 適當的類別
3. 這些被 return 的類別也要一一建立,並且都有一個同名的操作方法供呼叫
4. 用戶端用工廠的 interface 為變數型態,先 new 出適當的工廠子類別,再呼叫其內的方法 return 回適當的操作類別
5.該操作類別就可呼叫其內的方法,以後修改時在用戶端只需修改 new 出適當的工廠子類別的地方即可
維基百科對於 Factory Method Pattern 的描述(英文)
維基百科對於 Factory Method Pattern 的描述(中文)
設計模式小筆記-Proxy Pattern
標籤:
設計模式
Proxy Pattern
代理模式
使用時機:
需求物件跟執行物件可以無任何關連,用代理者物件做為中介
要點:
1. 代理者與被代理者都實作同一個介面(具有相同方法)
2. 代理者裡有一個變數存放被代理者,代理者所實作的方法都是透過這個變數去執行被代理者所實作的方法
3. 用戶端只需要對代理者進行操作即可
維基百科對於Proxy Pattern的說明
代理模式
使用時機:
需求物件跟執行物件可以無任何關連,用代理者物件做為中介
要點:
1. 代理者與被代理者都實作同一個介面(具有相同方法)
2. 代理者裡有一個變數存放被代理者,代理者所實作的方法都是透過這個變數去執行被代理者所實作的方法
3. 用戶端只需要對代理者進行操作即可
維基百科對於Proxy Pattern的說明
2009/07/09
設計模式小筆記-Decorator Pattern
標籤:
設計模式
Decorator Pattern
修飾模式
使用時機:
希望可以在執行期間把一些功能選擇性地加入物件裡
要點:
1. 定義一個 interface,包含一個用來操作功能的方法(本例取名為 component)
2. 實作上述 interface,撰寫具體物件類別(將來把功能加在它身上,本例為 ConcreteComp)與 Decorator 類別,在 Decorator 類別有一個型別為 component 的變數,並有一個方法來設定它(本例為setComp方法)
3. 可選擇性加入的功能都繼承 Decorator 類別而建立
4. 用戶端,new 一個 ConcreteComp 及欲加入的的功能實體,第一個功能實體 setComp 將ConcreteComp 指派給自己,第二個功能實體 setComp 將 第一個功能實體 指派給自己,以此類推(所以這些功能具有順序性,為物件鏈)
維基百科關於修飾模式的說明與範例
維基百科關於修飾模式的說明與範例(英文)
修飾模式
使用時機:
希望可以在執行期間把一些功能選擇性地加入物件裡
要點:
1. 定義一個 interface,包含一個用來操作功能的方法(本例取名為 component)
2. 實作上述 interface,撰寫具體物件類別(將來把功能加在它身上,本例為 ConcreteComp)與 Decorator 類別,在 Decorator 類別有一個型別為 component 的變數,並有一個方法來設定它(本例為setComp方法)
3. 可選擇性加入的功能都繼承 Decorator 類別而建立
4. 用戶端,new 一個 ConcreteComp 及欲加入的的功能實體,第一個功能實體 setComp 將ConcreteComp 指派給自己,第二個功能實體 setComp 將 第一個功能實體 指派給自己,以此類推(所以這些功能具有順序性,為物件鏈)
維基百科關於修飾模式的說明與範例
維基百科關於修飾模式的說明與範例(英文)
2009/07/07
設計模式小筆記-Strategy Pattern
標籤:
設計模式
Strategy Pattern (Policy Pattern)
策略模式
使用時機:
同一個動作可能有不同演算法,而且可能隨時 (或頻繁) 更動
要點:
1. 建立介面,並建立多個子類別去實做介面內的同一個方法
2. 建立一個 Context 類別,建構時把合適的子類別存進一個型別為父類別的變數裡,並撰寫一個 public 方法負責呼叫該父類別變數的演算法方法(也可與 Simple Factory Pattern 結合,把 Factory 類別判斷合適的子類別為何的邏輯放進 Context 類別的建構子裡)
3. 用戶端程式只要傳進合適的參數去 new 出 Context 類別,就可以使用 Context 類別內的 public 方法達到呼叫不同的演算法的目的。
維基百科上的說明與範例
比較 Simple Factory Pattern 與 Strategy Pattern:
1. 簡單工廠模式解決的是物件建立的問題,策略模式的重點則在用一個方式調用一系列演算法,使演算法的變動不會影響到用戶端
2. 對用戶端來說,使用簡單工廠模式必須 import 父類別跟 Factory 類別;但使用策略模式時只需 import 一個 Context 類別就行,耦合度降低
策略模式
使用時機:
同一個動作可能有不同演算法,而且可能隨時 (或頻繁) 更動
要點:
1. 建立介面,並建立多個子類別去實做介面內的同一個方法
2. 建立一個 Context 類別,建構時把合適的子類別存進一個型別為父類別的變數裡,並撰寫一個 public 方法負責呼叫該父類別變數的演算法方法(也可與 Simple Factory Pattern 結合,把 Factory 類別判斷合適的子類別為何的邏輯放進 Context 類別的建構子裡)
3. 用戶端程式只要傳進合適的參數去 new 出 Context 類別,就可以使用 Context 類別內的 public 方法達到呼叫不同的演算法的目的。
維基百科上的說明與範例
比較 Simple Factory Pattern 與 Strategy Pattern:
1. 簡單工廠模式解決的是物件建立的問題,策略模式的重點則在用一個方式調用一系列演算法,使演算法的變動不會影響到用戶端
2. 對用戶端來說,使用簡單工廠模式必須 import 父類別跟 Factory 類別;但使用策略模式時只需 import 一個 Context 類別就行,耦合度降低
設計模式小筆記-Simple Factory Pattern
標籤:
設計模式
Simple Factory Pattern (Static Factory Pattern)
簡單工廠模式
使用時機:
同一個動作可能有不同運算方式(或邏輯)時
要點:
1. 子類別擁有相同名稱的方法(先定義一個父類別,再建立多個子類別去 override 父類別內的同一個方法)
2. 由 Factory 類別裡的一個 static 方法(依據傳入的參數)去負責判斷並 new 出適合的子類別,回傳
3. 用戶端以一個父類別變數呼叫 Factory 類別裡的那個 static 方法,即可得到適合的子類別(雖回傳為父類別,由於方法是 override,故可使用子類別的方法)
4. 子類別可依狀況做增加或維護,但記得要一併修改 Factory 類別裡的 static 方法,使其能正確 new 出需要的子類別
簡單工廠模式
使用時機:
同一個動作可能有不同運算方式(或邏輯)時
要點:
1. 子類別擁有相同名稱的方法(先定義一個父類別,再建立多個子類別去 override 父類別內的同一個方法)
2. 由 Factory 類別裡的一個 static 方法(依據傳入的參數)去負責判斷並 new 出適合的子類別,回傳
3. 用戶端以一個父類別變數呼叫 Factory 類別裡的那個 static 方法,即可得到適合的子類別(雖回傳為父類別,由於方法是 override,故可使用子類別的方法)
4. 子類別可依狀況做增加或維護,但記得要一併修改 Factory 類別裡的 static 方法,使其能正確 new 出需要的子類別
訂閱:
文章 (Atom)