策略模式總結

以諸葛亮給趙雲(伴郎)三個錦囊妙計爲例:
先看類圖(先畫類圖的習慣非常重要,以後得慢慢養成這個習慣):

          策略模式總結


//首先定義一個策略接口
public interface IStrategy {
//每個錦囊妙計都是一個可執行的算法
public void operate();
}

//實現第一個妙計
public class FirstIdea implements IStrategy{
public void operate(){
System.out.println("找喬國老幫忙,讓吳國太給孫權施加壓力");
}
}

//實現第二個妙計
public class SecondIdea implements IStrategy {
public void operate(){
System.out.println("求吳國太開個綠燈,放行!");
}
}

//實現第三個妙計
public class ThirdIdea implements IStrategy {
public void operate(){
System.out.println("孫夫人斷後,擋住追兵");
}
}

//三個妙計有了,現在該實現錦囊了,錦囊裏面裝個妙計
public class Tips{
private IStrategy iStrategy;
//構造函數,看要使用哪個妙計
public Tips(IStrategy iStrategy){
this.iStrategy= iStrategy;
}

//使用妙計出招
public void operate() {
iStrategy.operate();
}
}

//現在該趙雲出場了,一次使用三個錦囊妙計
public class ZhaoYun{
public static void main(String[] args) {

Tips tips;

//剛剛到吳國的時候拆第一個
System.out.println("-----------剛剛到吳國的時候拆第一個-------------");
tips = new Tips(newFirstIdea()); //拿到妙計
tips.operate(); //拆開執行
System.out.println("\n\n\n\n\n\n\n\n");

//劉備樂不思蜀了,拆第二個了
System.out.println("-----------劉備樂不思蜀了,拆第二個了-------------");
tips = new Tips(new SecondIdea());
tips.operate(); //執行了第二個錦囊了
System.out.println("\n\n\n\n\n\n\n\n");

//孫權的小兵追了,咋辦?拆第三個
System.out.println("-----------孫權的小兵追了,咋辦?拆第三個-------------");
tips = new Tips(new ThirdIdea());
tips.operate(); //孫夫人退兵
System.out.println("\n\n\n\n\n\n\n\n");
}
}
策略模式的好處就是:體現了高內聚低耦合的特性。
還有一個就是擴展性就是:OCP(Open-Closedprinciple:開-閉原則)原則,策略類可以繼續增加下去,只要修改Tips.java就可以了。
OCP原則認爲:一個軟件應該對擴展開放,對修改關閉。 這是由大師BertrandMeyer提出,英文原文是:Softwareentities should be open for extension,but closed formodification.

要達到OCP,關鍵是抽象化,可以定義一個或多個接口或抽象類,規定所有具體類必須實現的方法作爲抽象層,這個抽象預見了你的系統或模塊將來的擴展,因此在任何擴展情況下都不會改變。這就使得系統的抽象層不需要修改,從而滿足了OCP中對修改關閉的原則。但是由於有具體實現的類可以擴展來改變系統的行爲,所以系統的設計是開放的,滿足了OCP中擴展的要求。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章