策略模式是一种行为设计模式, 它能让你定义多种算法或行为方式, 并将具体实现放入独立的类中, 以使算法的对象能够相互替换。使用场景例如活动中多种打折策略。
策略抽象
/**
* @author ggbond
* @date 2024年04月18日 08:02
*/
public interface Istrategy {
void discount();
}
策略实现
public class DiscountStrategy01 implements Istrategy {
@Override
public void discount() {
System.out.println("全场苹果打8.5折");
}
}
public class DiscountStrategy02 implements Istrategy {
@Override
public void discount() {
System.out.println("全场西瓜打9折");
}
}
public class DiscountStrategy03 implements Istrategy {
@Override
public void discount() {
System.out.println("全场水果拼盘买两盒送一盒");
}
}
上下文
public class Context {
private Istrategy strategy;
public void setStrategy(Istrategy strategy) {
this.strategy = strategy;
}
public void discount(){
strategy.discount();
}
}
测试与结果
/**
* @author ggbond
* @date 2024年04月18日 08:13
*/
public class Main {
public static void main(String[] args) {
Context context = new Context();
Istrategy s1=new DiscountStrategy01();
Istrategy s2=new DiscountStrategy02();
Istrategy s3=new DiscountStrategy03();
//设置策略
context.setStrategy(s1);
context.discount();
//更换策略
context.setStrategy(s2);
context.discount();
context.setStrategy(s3);
context.discount();
}
}
全场苹果打8.5折
全场西瓜打9折
全场水果拼盘买两盒送一盒
总结
当有许多仅在执行某些行为目的一致,行为方式相似类时, 可使用策略模式。满足开闭原则,无需对上下文进行修改就能够引入新的策略。
代码下载
代码下载