Java設計模式從精通到入門三 策略模式
阿新 • • 發佈:2018-11-15
介紹
我儘量用最少的語言解釋總結:
Java23種設計模式之一,屬於行為型模式。一個類的行為或者演算法可以在執行時更改,策略物件改變context物件執行演算法。
應用例項:
以周瑜賠了夫人又折兵的例子。
uml類圖如下
主要程式碼如下
策略介面
/**
* @ClassName Stragety
* @Description 策略抽象類
* @Author ouyangkang
* @Date 2018-11-15 09:06
**/
public interface Stragety {
void operation();
}
策略介面實現類
/** * @ClassName BackDoorStragety * @Description 喬國老開後門 * @Author ouyangkang * @Date 2018-11-15 09:14 **/ public class BackDoorStragety implements Stragety { @Override public void operation() { System.out.println("拜訪喬國老,請求開後門"); } }
/**
* @ClassName GreenLightStragety
* @Description 吳國太開綠燈
* @Author ouyangkang
* @Date 2018-11-15 09:16
**/
public class GreenLightStragety implements Stragety {
@Override
public void operation() {
System.out.println("拜訪吳國太,請求開綠燈");
}
}
/** * @ClassName PostBreakStragety * @Description 孫夫人斷後 * @Author ouyangkang * @Date 2018-11-15 09:18 **/ public class PostBreakStragety implements Stragety { @Override public void operation() { System.out.println("拜訪孫夫人,請求斷後"); } }
context類
/** * @ClassName Context * @Description 策略執行 * @Author ouyangkang * @Date 2018-11-15 09:18 **/ public class Context { private Stragety stragety; public Context(Stragety stragety){ this.stragety = stragety; } public void operation(){ this.stragety.operation(); } }
main
/**
* @ClassName Main
* @Description TODO
* @Author ouyangkang
* @Date 2018/9/25 11:22
**/
public class Main {
public static void main(String[] args) {
System.out.println("去往吳國, 劉備慌得一匹,趙雲開啟第一個錦囊");
Context backDoor = new Context(new BackDoorStragety());
backDoor.operation();
System.out.println("--------------");
System.out.println("劉備在吳國還不是美滋滋,美酒,美人, 趙雲開啟第二個錦囊");
Context greenLight = new Context(new GreenLightStragety());
greenLight.operation();
System.out.println("--------------");
System.out.println("準備撤了,趙雲開啟第三個精囊");
Context postBreak = new Context(new PostBreakStragety());
postBreak.operation();
System.out.println("諸葛亮氣死周瑜");
}
}
執行結果:
去往吳國, 劉備慌得一匹,趙雲開啟第一個錦囊
拜訪喬國老,請求開後門
--------------
劉備在吳國還不是美滋滋,美酒,美人, 趙雲開啟第二個錦囊
拜訪吳國太,請求開綠燈
--------------
準備撤了,趙雲開啟第三個精囊
拜訪孫夫人,請求斷後
諸葛亮氣死周瑜
總結
可以用策略模式代替過多的if else。更加的靈活