介绍
我尽量用最少的语言解释总结:
Java23种设计模式之一,属于行为型模式。一个类的行为或者算法可以在运行时更改,策略对象改变context对象执行算法。
应用实例:
以周瑜赔了夫人又折兵的例子。
uml类图如下
主要代码如下
策略接口
/**
* @ClassName Stragety
* @Description 策略抽象类
* @Author ouyangkang
* @Date 2018-11-15 09:06
**/
public interface Stragety {
void operation();
}
策略接口实现类
/**
* @ClassName BackDoorStragety
* @Description 乔国老开后门
* @Author ouyangkang
* @Date 2018-11-15 09:14
**/
public class BackDoorStragety implements Stragety {
@Override
public void operation() {
System.out.println("拜访乔国老,请求开后门");
}
}
/**
* @ClassName GreenLightStragety
* @Description 吴国太开绿灯
* @Author ouyangkang
* @Date 2018-11-15 09:16
**/
public class GreenLightStragety implements Stragety {
@Override
public void operation() {
System.out.println("拜访吴国太,请求开绿灯");
}
}
/**
* @ClassName PostBreakStragety
* @Description 孙夫人断后
* @Author ouyangkang
* @Date 2018-11-15 09:18
**/
public class PostBreakStragety implements Stragety {
@Override
public void operation() {
System.out.println("拜访孙夫人,请求断后");
}
}
context类
/**
* @ClassName Context
* @Description 策略执行
* @Author ouyangkang
* @Date 2018-11-15 09:18
**/
public class Context {
private Stragety stragety;
public Context(Stragety stragety){
this.stragety = stragety;
}
public void operation(){
this.stragety.operation();
}
}
main
/**
* @ClassName Main
* @Description TODO
* @Author ouyangkang
* @Date 2018/9/25 11:22
**/
public class Main {
public static void main(String[] args) {
System.out.println("去往吴国, 刘备慌得一匹,赵云打开第一个锦囊");
Context backDoor = new Context(new BackDoorStragety());
backDoor.operation();
System.out.println("--------------");
System.out.println("刘备在吴国还不是美滋滋,美酒,美人, 赵云打开第二个锦囊");
Context greenLight = new Context(new GreenLightStragety());
greenLight.operation();
System.out.println("--------------");
System.out.println("准备撤了,赵云打开第三个精囊");
Context postBreak = new Context(new PostBreakStragety());
postBreak.operation();
System.out.println("诸葛亮气死周瑜");
}
}
执行结果:
去往吴国, 刘备慌得一匹,赵云打开第一个锦囊
拜访乔国老,请求开后门
--------------
刘备在吴国还不是美滋滋,美酒,美人, 赵云打开第二个锦囊
拜访吴国太,请求开绿灯
--------------
准备撤了,赵云打开第三个精囊
拜访孙夫人,请求断后
诸葛亮气死周瑜
总结
可以用策略模式代替过多的if else。更加的灵活