title: 策略模式
author: rack-leen
avatar: /images/favicon.png
authorDesc: 脱发典范
comments: true
copyright: true
date: 2019-5-19 22:13:05
tags:
Define a family of algorithms , encapsulate each one , and make them interchangeable.
定义一组算法,将每个算法封装起来,并且使它们之间可以互换。
/**
* 策略总接口
*/
public interface IStrategy {
/* 对外提供的策略接口 */
public void strategy();
}
public class Strategy1 implements IStrategy {
/* 具体策略1,我们需要的第一个策略 */
@Override
public void strategy() {
System.out.println("策略1");
}
}
public class Strategy2 implements IStrategy{
/* 具体策略2,我们需要的第二个策略 */
@Override
public void strategy() {
System.out.println("策略2");
}
}
public class Strategy3 implements IStrategy {
/* 具体策略3,我们需要的第三个策略 */
@Override
public void strategy() {
System.out.println("策略3");
}
}
将策略进行封装
/**
* 策略上下文,封装策略,将需要的策略置于需要的场景中
*/
public class Context {
private IStrategy strategy ;
/* 获取封装的策略 */
public IStrategy getStrategy(){
return strategy ;
}
/* 将需要的策略放入策略上下文中 */
public void setStrategy(IStrategy strategy){
this.strategy = strategy ;
}
/* 执行策略,可以在策略周围添加我们需要的逻辑 */
public void executeStrategy(){
System.out.println("策略开始执行");
strategy.strategy();
System.out.println("策略执行完成");
}
}
public class Test{
public static void main(String[] args) {
/* 先创建需要的具体策略 */
IStrategy strategy1 = new Strategy1();
/* 然后创建执行过程 */
Context context = new Context();
/* 将策略放入执行过程 */
context.setStrategy(strategy1);
/* 添加上我们的逻辑后,我们就可以开始执行策略了 */
context.executeStrategy();
}
}