我觉得设计模式这东西,最好还是反复看看书,推荐Head First我也是看这个的(https://pan.baidu.com/s/1x0aiZHEz_UMa_fKa8QNWbg ---- njh1)
嗯,不用谢。
标准的定义是:策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
简单来讲就是有好几个算法,他就是用来决定使用哪一套的
类图就酱紫啦
代码如下:
package cn.bl.strategy;
/**
* @Deacription 使用策略
* @Author BarryLee
* @Date 2019/9/22 16:21
*/
public class Main {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new ConcreteStrategyA());
context.algorithm();
context.setStrategy(new ConcreteStrategyB());
context.algorithm();
}
}
package cn.bl.strategy;
/**
* 策略接口
*/
public interface Strategy {
/**
* 策略方法
*/
void algorithm();
}
package cn.bl.strategy;
/**
* @Deacription 环境类
* @Author BarryLee
* @Date 2019/9/22 16:21
*/
public class Context {
// 策略是私有的
private Strategy strategy;
// 获取策略方法
public Strategy getStrategy() {
return strategy;
}
// 设置策略
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
// 调用策略
public void algorithm() {
strategy.algorithm();
}
}
package cn.bl.strategy;
/**
* @Deacription 具体策略类A
* @Author BarryLee
* @Date 2019/9/22 16:21
*/
public class ConcreteStrategyA implements Strategy{
@Override
public void algorithm() {
System.out.println("strategy A");
}
}
package cn.bl.strategy;
/**
* @Deacription 具体策略类B
* @Author BarryLee
* @Date 2019/9/22 16:22
*/
public class ConcreteStrategyB implements Strategy{
@Override
public void algorithm() {
System.out.println("strategy B");
}
}