日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java计数器策略模式_java设计模式(二十一)--策略模式

發(fā)布時(shí)間:2024/9/27 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java计数器策略模式_java设计模式(二十一)--策略模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)于策略模式,我在很多面試題上看到過考察這一類的問題,這種模式也的確比較好用。 我感覺這種模式就是將不同實(shí)現(xiàn)的方法放到一個(gè)接口中,然后通過實(shí)現(xiàn)這個(gè)接口來實(shí)現(xiàn)不同的運(yùn)行結(jié)果,這種模式有三部分構(gòu)成: 策略接口 策略實(shí)現(xiàn)類 策略作用類(使用策略的類) 網(wǎng)絡(luò)上的專業(yè)解釋:

此模式下,一個(gè)類的行為或者其算法可以在運(yùn)行時(shí)更改,我們要定義一系列的算法,把他們一個(gè)個(gè)封裝起來,并使他們可以相互替換。

實(shí)例:用此模式描述四則運(yùn)算,可不斷替換。

以下是我對(duì)此實(shí)例做的類圖:

以下是我編寫代碼: 1.創(chuàng)建策略接口,用來存放四則運(yùn)算計(jì)算器中的不同運(yùn)行的方法

//策略接口

interface Strategy {

int doAction(int num1,int num2);

}

2.創(chuàng)建實(shí)現(xiàn)策略接口的四則計(jì)算實(shí)現(xiàn)類

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.創(chuàng)建一個(gè)使用某種策略的類,可以根據(jù)需求不同來使用不同的策略

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.創(chuàng)建測(cè)試類,使用不同的策略來實(shí)現(xiàn)需求

public class Test {

public static void main(String[] args) {

System.out.println("=========加法計(jì)算器==========");

Calculator calculator=new Calculator(1, 2);

System.out.println("1+2="+calculator.operate(new AddStrategy()));

System.out.println("=========減法計(jì)算器==========");

Calculator calculator1=new Calculator(10, 20);

System.out.println("10-20="+calculator1.operate(new SubtractStrategy()));

System.out.println("=========乘法計(jì)算器==========");

Calculator calculator2=new Calculator(3, 5);

System.out.println("3*5="+calculator2.operate(new MultiplyStrategy()));

System.out.println("=========除法計(jì)算器==========");

Calculator calculator3=new Calculator(10, 2);

System.out.println("10/2="+calculator3.operate(new DivisionStrategy()));

}

}

5.后臺(tái)輸出

=========加法計(jì)算器==========

1+2=3

=========減法計(jì)算器==========

10-20=-10

=========乘法計(jì)算器==========

3*5=15

=========除法計(jì)算器==========

10/2=5

看完代碼之后,大家是不是感覺這種模式與狀態(tài)模式是差不多的,是差不多,他倆原理都是用的覆蓋嘛,但是狀態(tài)模式的狀態(tài)作用者里面要用到狀態(tài)的實(shí)例對(duì)象,但是這個(gè)策略模式的策略使用者卻是將策略當(dāng)做參數(shù)來傳入的,這樣減少了對(duì)象的創(chuàng)建,提高了性能。

這種模式的優(yōu)點(diǎn):

1.如果我們要加一個(gè)相反數(shù)策略的話,只需要實(shí)現(xiàn)策略接口即可,體現(xiàn)了易擴(kuò)展性,符合”開閉原則”。

2.算法在客戶端可以根據(jù)需要自由切換,適應(yīng)了不同需求。

3.在客戶端使用將策略對(duì)象參數(shù)化的方法來調(diào)用具體策略的方法,避免在客戶端新建對(duì)象實(shí)例,提高系統(tǒng)性能。

缺點(diǎn):

1.策略使用類要知道所有的策略類才行,然后才能自行決定要用哪一個(gè)策略。

2.隨著策略的不斷增多,策略類也會(huì)不斷的增多,提高后期的維護(hù)困難性。

總結(jié)

以上是生活随笔為你收集整理的java计数器策略模式_java设计模式(二十一)--策略模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。