java计数器策略模式_java设计模式(二十一)--策略模式
對于策略模式,我在很多面試題上看到過考察這一類的問題,這種模式也的確比較好用。 我感覺這種模式就是將不同實現的方法放到一個接口中,然后通過實現這個接口來實現不同的運行結果,這種模式有三部分構成: 策略接口 策略實現類 策略作用類(使用策略的類) 網絡上的專業解釋:
此模式下,一個類的行為或者其算法可以在運行時更改,我們要定義一系列的算法,把他們一個個封裝起來,并使他們可以相互替換。
實例:用此模式描述四則運算,可不斷替換。
以下是我對此實例做的類圖:
以下是我編寫代碼: 1.創建策略接口,用來存放四則運算計算器中的不同運行的方法
//策略接口
interface Strategy {
int doAction(int num1,int num2);
}
2.創建實現策略接口的四則計算實現類
public class AddStrategy implements Strategy {
@Override
public int doAction(int num1, int num2) {
return num1+num2;
}
}
public class SubtractStrategy implements Strategy{
@Override
public int doAction(int num1, int num2) {
return num1-num2;
}
}
public class MultiplyStrategy implements Strategy {
@Override
public int doAction(int num1, int num2) {
return num1*num2;
}
}
public class DivisionStrategy implements Strategy {
@Override
public int doAction(int num1, int num2) {
return num1/num2;
}
}
3.創建一個使用某種策略的類,可以根據需求不同來使用不同的策略
public class Calculator {
private int num1;
private int num2;
public Calculator(int num1, int num2) {
this.num1 = num1;
this.num2 = num2;
}
public int operate(Strategy strategy){
return strategy.doAction(num1, num2);
}
}
4.創建測試類,使用不同的策略來實現需求
public class Test {
public static void main(String[] args) {
System.out.println("=========加法計算器==========");
Calculator calculator=new Calculator(1, 2);
System.out.println("1+2="+calculator.operate(new AddStrategy()));
System.out.println("=========減法計算器==========");
Calculator calculator1=new Calculator(10, 20);
System.out.println("10-20="+calculator1.operate(new SubtractStrategy()));
System.out.println("=========乘法計算器==========");
Calculator calculator2=new Calculator(3, 5);
System.out.println("3*5="+calculator2.operate(new MultiplyStrategy()));
System.out.println("=========除法計算器==========");
Calculator calculator3=new Calculator(10, 2);
System.out.println("10/2="+calculator3.operate(new DivisionStrategy()));
}
}
5.后臺輸出
=========加法計算器==========
1+2=3
=========減法計算器==========
10-20=-10
=========乘法計算器==========
3*5=15
=========除法計算器==========
10/2=5
看完代碼之后,大家是不是感覺這種模式與狀態模式是差不多的,是差不多,他倆原理都是用的覆蓋嘛,但是狀態模式的狀態作用者里面要用到狀態的實例對象,但是這個策略模式的策略使用者卻是將策略當做參數來傳入的,這樣減少了對象的創建,提高了性能。
這種模式的優點:
1.如果我們要加一個相反數策略的話,只需要實現策略接口即可,體現了易擴展性,符合”開閉原則”。
2.算法在客戶端可以根據需要自由切換,適應了不同需求。
3.在客戶端使用將策略對象參數化的方法來調用具體策略的方法,避免在客戶端新建對象實例,提高系統性能。
缺點:
1.策略使用類要知道所有的策略類才行,然后才能自行決定要用哪一個策略。
2.隨著策略的不斷增多,策略類也會不斷的增多,提高后期的維護困難性。
總結
以上是生活随笔為你收集整理的java计数器策略模式_java设计模式(二十一)--策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux服务器做页面,linux服务器
- 下一篇: python转义引号的作用_python