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