今天開始咱們來談談Java設計模式。這里會結合uml圖形來講解,有對uml建模不熟的可以參考我的另一篇博文**[uml建模](http://blog.csdn.net/lhy_ycu/article/details/39561781)。**
首先,個人覺得模式的設計就是一個將變化的東西和不變(穩定)的東西分離的過程。咱們的應用中可能有很多需要改變的地方,而模式要做的就是把它們“抽取”出來并進行“封裝”和“實現”,因此更多的時候咱們是面向接口編程。下面將結合《Head First 設計模式》這一書中的某些具體案例以及本人的理解進行講解。如果大家透過看圖能說出是哪種模式并能進行具體的代碼實現及加以應用,反之也能做到,那么我想關于Java這些常見的設計模式你也就掌握的差不多了。
關于策略模式,網上有的說法是:策略模式讓用戶可以選擇執行一個動作的方法,也就是說,用戶可以選擇不同的策略來進行操作。個人覺得策略模式可以用這個公式:不同的XXX 擁有不同的XXX供用戶選擇。比如說:不同的象棋棋子擁有不同的走法供用戶選擇。
下面根據游戲中的不同人物擁有不同武器供用戶選擇的簡單案例:
## 一、UML模型圖

## 二、代碼實現
~~~
/**
* 武器 --模板
*/
interface WeaponBehavior {
void useWeapon();
}
class KnifeBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("實現用匕首刺殺...");
}
}
class BowAndArrowBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("實現用弓箭設計...");
}
}
class AxeBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("實現用斧頭劈砍...");
}
}
class SwordBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("實現用寶劍揮舞...");
}
}
/**
* 角色
*/
abstract class Character {
// 將接口作為抽象角色的Field以便封裝
protected WeaponBehavior weaponBehavior;
public void setWeapon(WeaponBehavior w) {
weaponBehavior = w;
}
/**
* 這里有點類似“代理模式”
*/
public void performWeapon() {
// do something...
weaponBehavior.useWeapon();
// do something...
}
public abstract void fight();
}
/**
* 國王使用寶劍揮舞
*/
class King extends Character {
public King() {
weaponBehavior = new SwordBehavior();
}
@Override
public void fight() {
System.out.println("國王使用寶劍揮舞...");
}
}
/**
* 皇后使用匕首刺殺
*/
class Queen extends Character {
public Queen() {
weaponBehavior = new KnifeBehavior();
}
@Override
public void fight() {
System.out.println("皇后使用匕首刺殺...");
}
}
/**
* Knight和Troll以此類推,這里就不寫了
*/
/**
* 客戶端測試
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
Character king = new King();
king.performWeapon();
// 這里有點類似于“狀態模式”
king.setWeapon(new AxeBehavior());
king.performWeapon();
Character queen = new Queen();
queen.performWeapon();
queen.setWeapon(new BowAndArrowBehavior());
queen.performWeapon();
}
}
~~~
## 三、應用場景(僅代表個人觀點)
游戲中的角色武器、棋類游戲中的棋子走法等。
## 四、小結
以上內容如果有不同的見解或疏忽的地方,還請大家提出寶貴的建議或意見。
最后大家可以試著將下面的uml模型進行具體的代碼實現,如圖:[**附源碼**](http://download.csdn.net/detail/jave_lover/7996843)

- 前言
- (一)策略模式建模與實現
- (二)觀察者模式建模與實現
- (三)裝飾者模式建模與實現
- (四)工廠方法模式建模與實現
- (五)抽象工廠模式建模與實現
- (六)單例模式建模與實現
- (七)命令模式建模與實現
- (八)適配器模式建模與實現
- (九)外觀模式建模與實現
- (十)模板方法模式建模與實現
- (十一)迭代器模式建模與實現
- (十二)組合模式建模與實現
- (十三)狀態模式建模與實現
- (十四)代理模式建模與實現
- (十五)建造者模式建模與實現
- (十六)原型模式建模與實現
- (十七)橋接模式建模與實現
- (十八)責任鏈模式建模與實現
- (十九)備忘錄模式建模與實現
- (二十)解釋器模式建模與實現
- (二十一)享元模式建模與實現
- (二十二)中介者模式建模與實現
- (二十三)訪問者模式建模與實現
- Java設計模式博客全目錄