定義:一個類的行為或其算法可以在運行時更改。在策略模式中,我們創建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執行算法。
特點:
1、算法可以自由切換。
2、避免使用多重條件判斷。
3、擴展性良好。
企業級開發和常用框架中的應用:java.servlet.http.HttpServlet的service方法
實例:對兩個數的操作行為。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
public class Demo { public static void main(String[] args) { Strategy strategy1 = new StrategyAdd(); Strategy strategy2 = new StrategyDiv(); Context context1 = new Context(strategy1); context1.execute( 10 , 5 ); context1 = new Context(strategy2); context1.execute( 10 , 5 ); } } interface Strategy{ public void doOperation( int num1, int num2); } class StrategyAdd implements Strategy{ public void doOperation( int num1, int num2) { System.out.println( "執行加法" ); System.out.println(num1+ "+" +num2+ "=" +(num1+num2)); } } class StrategySub implements Strategy{ public void doOperation( int num1, int num2) { System.out.println( "執行減法" ); System.out.println(num1+ "-" +num2+ "=" +(num1-num2)); } } class StrategyMul implements Strategy{ public void doOperation( int num1, int num2) { System.out.println( "執行乘法" ); System.out.println(num1+ "*" +num2+ "=" +(num1*num2)); } } class StrategyDiv implements Strategy{ public void doOperation( int num1, int num2) { System.out.println( "執行除法" ); System.out.println(num1+ "/" +num2+ "=" +(num1/num2)); } } class Context{ private Strategy strategy; public Context(Strategy strategy) { this .strategy = strategy; } public void execute( int num1, int num2){ strategy.doOperation(num1, num2); } } |
策略模式強調的是運行時更改,可能在上面的代碼中,這種運行時更改沒有得到很好的體現,我們可以假設一個實際場景,就是當一個對象參數傳到一個方法中來的時候,假設我們要根據參數的不同選擇不同的方法,我們這是會考慮if-else來進行判斷,而策略模式則是對這些if-else進行分類,每一個判斷一個類,然后對象過來了,直接調用策略接口方法,而對象參數屬于哪個具體類則是有jvm來判斷,我們不必要去了解對象參數屬性類型什么的,這樣不僅簡化了我們的開發工作,而且相比較于if-else,這樣有更好的擴展性。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。