策略接口
public interface Strategy {
int calc ( int a, int b) ;
}
Context,传入不同的策略,完成不同实现
public class Context {
private Strategy strategy;
Context ( Strategy strategy) {
this . strategy = strategy;
}
public int work ( int a, int b) {
return strategy. calc ( a, b) ;
}
}
枚举类,枚举不同的策略
public enum Algorithm {
ADD ( "1" , "相加" ) {
@Override
Strategy getStrategy ( ) {
return new StrategyAdd ( ) ;
}
} ,
X ( "2" , "相乘" ) {
@Override
Strategy getStrategy ( ) {
return new StrategyX ( ) ;
}
} ;
private String value;
private String describe;
Algorithm ( String value, String describe) {
this . value = value;
this . describe = describe;
}
public String getValue ( ) {
return value;
}
public void setValue ( String value) {
this . value = value;
}
public String getDescribe ( ) {
return describe;
}
public void setDescribe ( String describe) {
this . describe = describe;
}
static Algorithm getByValue ( String value) {
for ( Algorithm algorithm : values ( ) ) {
if ( algorithm. getValue ( ) . equals ( value) ) {
return algorithm;
}
}
return null ;
}
abstract Strategy getStrategy ( ) ;
}
调用
public class Main {
public static void main ( String [ ] args) {
System . out. println ( new Context ( Algorithm . getByValue ( "1" ) . getStrategy ( ) ) . work ( 3 , 2 ) ) ;
System . out. println ( new Context ( Algorithm . getByValue ( "2" ) . getStrategy ( ) ) . work ( 3 , 2 ) ) ;
}
}