天天看小說

第172章

小A:“它所涉及到哪些角色呢?”

大B:“策略模式中分成三種角色。抽象策略角色:通常用一個(gè)抽象類或者接口來實(shí)現(xiàn),主要是定義這個(gè)算法所完成的功能。具體策略角色:包裝了相關(guān)算法和行爲(wèi)。環(huán)境角色:持有策略類的引用。”

下面我們還是看一個(gè)小例子,很多時(shí)候看代碼更能夠懂得其中的意思,不是那麼抽象,這個(gè)例子要實(shí)現(xiàn)的功能是加減乘除。

首先建立抽象策略角色:Operation.java

packageorg.kangta.straty;

/**

*

*@authorAdministrator

*抽象策略角色

*

*/

publicinterfaceOperation{

publicvoidop(doublea,doubleb);

}

再建立具體策略角色:四個(gè)Add.java、Sub.java、Div.java、Multi.java

Add.java

packageorg.kangta.straty;

/**

*具體策略角色

*@authorAdministrator

*

*/

publicclassAddimplementsOperation{

publicvoidop(doublea,doubleb){

//TODOAuto-generatedmethodstub

doubleresult=a+b;

System.out.println(result);

}

}

Sub.java

packageorg.kangta.straty;

/**

*具體策略角色

*@authorAdministrator

*

*/

publicclassSubimplementsOperation{

publicvoidop(doublea,doubleb){

//TODOAuto-generatedmethodstub

doubleresult=a-b;

System.out.println(result);

}

}

Div.java

packageorg.kangta.straty;

/**

*具體策略角色

*@authorAdministrator

*

*/

publicclassDivimplementsOperation{

publicvoidop(doublea,doubleb){

//TODOAuto-generatedmethodstub

if(b!=0)

{

doubleresult=a/b;

System.out.println(result);

}

else

{

System.out.println(“除0了!”);

}

}

}

Multi.java

packageorg.kangta.straty;

/**

*具體策略角色

*@authorAdministrator

*

*/

publicclassMultiimplementsOperation{

publicvoidop(doublea,doubleb){

//TODOAuto-generatedmethodstub

doubleresult=a*b;

System.out.println(result);

}

}

OK!抽象策略角色和具體策略角色都已經(jīng)建立成功了,現(xiàn)在來建立環(huán)境角色

Calc.java

packageorg.kangta.straty;

/**

*環(huán)境角色

*@authorAdministrator

*

*/

publicclassCalc{

publicfinalstaticAddadd=newAdd();

publicfinalstaticSubsub=newSub();

publicfinalstaticDivdiv=newDiv();

publicfinalstaticMultimulti=newMulti();

}

都建立好了測(cè)試一下

Test.java

packageorg.kangta.straty.test;

importorg.kangta.straty.Calc;

publicclassTest{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Calcc=newCalc();

c.add.op(11,22);

c.sub.op(22,11);

c.div.op(33,11);

c.multi.op(33,33);

}

}

測(cè)試成功

點(diǎn)評(píng)策略模式:

策略模式的優(yōu)點(diǎn):

提供管理相關(guān)算法族的辦法

提供可替代繼承關(guān)係的辦法

避免了使用多重條件判斷語句

策略模式的缺點(diǎn):

客戶端必須知道所有的策略類,自己去決定使用那一個(gè)

造成很策略類

第22章第185章第46章第176章第220章第210章第14章第85章第121章第123章第219章第227章第80章第164章第186章第141章第15章第96章第223章第54章第196章第114章第78章第148章第126章第200章第62章第143章第134章第194章第26章第11章第49章第99章第30章第74章第69章第173章第55章第159章第71章第43章第37章第91章第30章第223章第150章第164章第148章第3章第19章第21章第38章第139章第148章第29章第103章第191章第216章第217章第112章第50章第55章第82章第56章第65章第26章第218章第182章第165章第77章第203章第63章第1章第33章第23章第70章第192章第146章第161章第14章第213章第217章第156章第1章第212章第140章第200章第175章第149章第27章第158章第75章第162章第49章第139章第100章第130章第126章第1章
第22章第185章第46章第176章第220章第210章第14章第85章第121章第123章第219章第227章第80章第164章第186章第141章第15章第96章第223章第54章第196章第114章第78章第148章第126章第200章第62章第143章第134章第194章第26章第11章第49章第99章第30章第74章第69章第173章第55章第159章第71章第43章第37章第91章第30章第223章第150章第164章第148章第3章第19章第21章第38章第139章第148章第29章第103章第191章第216章第217章第112章第50章第55章第82章第56章第65章第26章第218章第182章第165章第77章第203章第63章第1章第33章第23章第70章第192章第146章第161章第14章第213章第217章第156章第1章第212章第140章第200章第175章第149章第27章第158章第75章第162章第49章第139章第100章第130章第126章第1章
主站蜘蛛池模板: 海盐县| 无极县| 凯里市| 蓬溪县| 永登县| 平邑县| 银川市| 化德县| 定陶县| 五华县| 峨眉山市| 东乡县| 泸定县| 郁南县| 离岛区| 清涧县| 新宾| 石柱| 青铜峡市| 汉源县| 军事| 米泉市| 临高县| 广饶县| 汾阳市| 麦盖提县| 梅河口市| 台南市| 亚东县| 旌德县| 云安县| 敦化市| 临汾市| 水富县| 景东| 长葛市| 柞水县| 麻阳| 茂名市| 托里县| 农安县|