設計模式
這個概念現在是滿天飛
大家手裡面估計都有
Erich Gamma
Richard Helm
Ralph Johnson
and John Vlissides
in the book
Design Patterns
Element of Re
Useable Object
Oriented Software
這本書
根據其中的說法
有三種
創建型模式
結構型模式和行為型模式
一共包括
個模式
在這裡不一一列舉
實際應用中
我們不可能在短時間內消化吸收掉
因為模式本身就是約定俗成的東西
依靠大家以往的項目經驗總結出來的習慣用法
習慣要時間去培養
去形成
所以大家不要急著去用所有的模式
但一定要有這種意識
在項目中
學習中開始用上幾個看看
研究研究模式給你會帶來什麼價值
但如果
你對Java JDK
源碼用到的設計模式感興趣
可以到官方網站下載!這個地方有詳細說明
在進入正題之前
我申明該文章沒有任何商業目的
其中涉及到開源軟件的一些源代碼
所以涉及到知識產權問題時
如果有人將其用於商業目的
個人不負責該方面的責任
在這裡只用於學習
交流的目的
謝謝合作
但問題出來了
如何將這些模式具體用到Java Project中呢?剛開始確實很頭疼
一方面
我們要知道模式的適用場合
引入模式給系統帶來的好壞
等等都需要我們去考慮的
另一方面
模式本身的理解消化吸收
再者
還有你的老板逼著你完成任務
)
等等
其實
冷靜分析一下
也不是沒有可能
我們在項目中
完成自己的工作是一方面
但另一方面要考慮好自己的職業生涯
要想把Java Coder
Java Developer
Java Architect
或者什麼的……做好
這些都是基本功
學者
就是喜歡把
+
這麼簡單的問題用什麼
理論推導出來
作為技術工作者
比如我們
看的是結果
技術的實作性
而大家在學設計模式中的過程中
往往脫離實踐
看看設計模式的UML圖(說句實在話
大家的UML功底都不會太好吧
把它用於我們的UP估計也少
)
還有模式的什麼意圖
別名
動機
適用性
結構
參與者
協作
效果
實現
代碼實例
腦袋都暈掉了
大家是否給忘記了
這種GP
本來
就很抽象
加上這麼多條條框框
兩個字
郁悶
我們不妨從分析GP代碼入手效果很很不錯
我學習過程中就是這樣的
要不我們現在就看看一個例子
以行為型模式State為例
(模式的實現例子網絡上有很多
Java的實現也很多
比如
Together ControlCenter裡面就內置了這種基於GP的編程模板
詳細內容大家用用就知道了
)
大家知道
State的用意在於
允許一個對象在其內部狀態改變時改變它的行為
對象看起來似乎修改了他的類
我們先看 上提供的GOF SOFTWARE DESIGN PATTERNS CATALOGUE的State模式源碼實現
首先看接口類
State
java
public interface State {
public void handle();
}
以定義接口以封裝與Conext(代碼稍候陳述!)的一個特定狀態相關的行為
然後看
接口的實現類
第一個
ConcreteState
java
public class ConcreteState
implements State {
public void handle() {
System
out
println(
ConcreteState
handle() executing
);
}
}
第二個
ConcreteState
java
public class ConcreteState
implements State {
public void handle() {
System
out
println(
ConcreteState
handle() executing
);
}
}
這兩個類實現了State接口
然後再看
Context
java是如何將上述三個
java文件聯系起來
public class Context {
public static final int STATE_ONE =
;
public static final int STATE_TWO =
;
//大家注意
這句話很關鍵
該模式做手腳的地方!
private State currentState = new ConcreteState
();
public void request() {
currentState
handle();
}
public void changeState(int state) {
switch (state) {
case STATE_ONE:
currentState = new ConcreteState
();//關鍵點
break;
case STATE_TWO:
currentState = new ConcreteState
();//關鍵點
break;
}
}
}
這樣
寫好
個
java文件後
其實您已經實現了State設計模式
很有趣
對吧?就是這樣簡單
再看看如何使用該設計模式了
寫一個Client
java看看
[code]public class Client {
public static void main(String[] args) {
// 構造Context
Context ctx = new Context();
// 喚起Context
request()
ctx
request();
// 改變ctx的狀態?為什麼改變了呢?大家想想看
ctx
changeState(Context
STATE_TWO);
// 再次喚起Context
request()
結果大不一樣
ctx
request();
}
}[/code]
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27367.html