对于设计模式里面的策略模式而言,个人认为是个比较常用,而且非常有用的设计方式。在策略模式里面,讲究的就是一个灵活,对于不同的方法实现都用了相应的策略来进行封装,因此在调用的时候会比较方便。
适合使用的策略模式的情况:
适用条件:
当逻辑里面出现了较多的条件判断的时候,可以使用相应的策略模式来进行优化。
优点:
代码灵活,高可控,可读性强。
缺点:
当判断逻辑较多的情况时,使用策略模式就不太适合。可以考虑一下组合模式来优化。
结合一个具体的案例来进行说明:
例如说计算器功能,需要进行加减乘除功能。那么我们在最初的设计里面可能会想到设计一个方法,然后传入相应的两个整数数值进行加减乘除,之后返回结果。
原先的设计方法是这样的:
package com.sise.策略模式;
public class CalculatorOriginal {
public int add(int a,int b){
return a+b;
}
public int div(int a,int b){
return a/b;
}
public int sub(int a,int b){
return a-b;
}
public int muit(int a,int b){
return a*b;
}
public int exec(int a,int b,String sign){
if(sign.equals( "-" )){
return this.sub(a,b);
}else if(sign.equals( "+" )){
return this.add(a,b);
}else if(sign.equals( "*" )){
return this.muit(a,b);
}else{
return this.div(a,b);
}
}
}
然后测试部分的内容:
package com.sise.策略模式;
import javax.sound.midi.Soundbank;
public class test {
public static void main(String[] args) {*
*CalculatorOriginal cal=new CalculatorOriginal();
System.out.println(cal.exec(2,2, "+" ));
System.out.println(cal.exec(2,2, "-" ));
System.out.println(cal.exec(2,2, "*" ));
System.out.println(cal.exec(2,2, "/" ));
}
}
使用枚举来进行策略模式之后的代码优化结果如下:
package com.sise.策略模式;
*//使用策略枚举
*public enum Calculator {
ADD( "+" ){
public int exec(int a,int b){
return a+b;
}
},
SUB( "-" ){
public int exec(int a,int b){
return a-b;
}
},
DIV( "/" ){
public int exec(int a,int b){
return a/b;
}
},
MULT( "*" ){
public int exec(int a,int b){
return a*b;
}
};
String value= "" ;
private Calculator(String value){
this.value=value;
}
public abstract int exec(int a,int b);
}
package com.sise.策略模式;
import javax.sound.midi.Soundbank;
public class test {
public static void main(String[] args) {
System.out.println( "使用了策略模式里面的枚举策略" );
System.out.println( "1+1=" +Calculator.ADD.exec(1,1));
System.out.println( "1-1=" +Calculator.SUB.exec(1,1));
System.out.println( "1*1=" +Calculator.MULT.exec(1,1));
System.out.println( "2/1=" +Calculator.DIV.exec(2,1));
}
}
这样一来,代码的简洁性和可读性一下子就得到了提升。