經典設計模式(一):策略模式
阿新 • • 發佈:2018-11-14
版權宣告
- 本文作者:低調小熊貓
- 本文連結:https://aodeng.cc/archives/pattern-yi
- 版權宣告:本文采用知識共享署名 4.0 國際許可協議進行許可。轉載-非商用-非衍生-保持署名,商業轉載請聯絡作者本人qq:2696284032
單純的廣告
個人部落格:https://aodeng.cc
微信公眾號:低調小熊貓
QQ群:756796932
簡介
寫出可維護、可複用、可擴充套件及靈活的程式碼是我們的目的,也是學習設計模式的理由,這句話是他孃的複製的,為什麼要學設計模式,設計模式是什麼,還是去百度一下吧,我就不裝13了,這只是我的學習筆記,非教程
這裡我舉一個計算器的例子
我會建立一個計算介面,介面實現加法,減法這兩個類,再建立一個計算器類(設定計算方法,返回值),最後建立一個test類測試
計算介面
public interface Operation {
public int doOperation(int number1,int number2);
}
介面實現加法,減法這兩個類
public class OperationAdd implements Operation { @Override public int doOperation(int number1, int number2) { return number1+number2; } } public class OperationSub implements Operation { @Override public int doOperation(int number1, int number2) { return number1-number2; } }
再建立一個計算器類(設定計算方法,返回值)
public class Cal {
private Operation operation;
public void setOperation(Operation operation){
this.operation=operation;
}
public int doOperation(int number1,int number2){
return this.operation.doOperation(number1,number2);
}
}
最後建立一個test類測試
/**
* @program:hope
* @author:aodeng
* @blog:低調小熊貓(https://aodeng.cc)
* @微信公眾號:低調小熊貓
* @create:2018-11-08 20:40
**/
public class TestController {
private static final Logger log= LoggerFactory.getLogger(TestController.class);
public static void main(String[] args) {
Cal cal=new Cal();
//使用加法
cal.setOperation(new OperationAdd());
//輸出結果
log.info("[計算器加]-[{}]",cal.doOperation(4,2));
//使用減法
cal.setOperation(new OperationSub());
//輸出結果
log.info("[計算器減]-[{}]",cal.doOperation(4,2));
}
}
執行效果
"C:\Program Files\Java\jdk1.8\bin\java" com.hope.test.TestController
20:44:33.994 [main] INFO com.hope.test.TestController - [計算器加]-[6]
20:44:34.012 [main] INFO com.hope.test.TestController - [計算器減]-[2]
Process finished with exit code 0
忘了在哪裡看的一句話,設計模式的基本原則:開閉原則。
意思就是:對修改關閉、對擴充套件開放
我們的計算器算和介面算是修改關閉的了,如果要擴充套件其他演算法,乘,除,只需要實現計算介面,然後呼叫計算器的setOption(new 擴充套件的介面)就行了,這樣我們程式,擴充套件性就非常強大了。
以下是我看教程的時候的一段話,我直接copy過來一下(哥認為最後一句話是重點,圈起來):
優點
已經十分明顯了,那就是遵循了開閉原則,擴充套件性良好。
缺點
隨著你的策略增加,你的類也會越來越多。
所有的策略類都要暴露出去,所以如果你在實際開發中使用了策略模式,一定要記得寫好文件讓你的夥伴們知道已有哪些策略。就像 shiro 預設提供了三種驗證策略,就必須在文件中寫清楚,否則我們根本不知道如何使用。
當然,權衡利弊,跟優點比起來,這些缺點都不算事兒。
原始碼
https://github.com/java-aodeng/hope
- 本文作者: 低調小熊貓
- 本文連結: https://aodeng.cc/archives/pattern-yi
- 版權宣告: 本部落格所有文章除特別宣告外,均採用CC BY-NC-SA 3.0 許可協議。轉載請註明出處!