策略模式是什么?
策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。
策略模式我个人认为就像打仗,诸葛亮军师在旁边。
诸葛亮有很多种锦囊妙计提供,暂时分为3类:天时、地形、人民三方面。
而由于是紧急措施,只能采用一个方法,作为我的最终方案。
诸葛亮就相当于一个接口,他可以根据你想要的方法,设置给你的锦囊中的具体策略类。然后最终的目的还是为了打仗胜利。
把这些结合起来就是策略模式了。
策略模式简单来说就是:你身边有个谋士已为你想出各种方法来达成想要的某个目的,你只要从谋士身上选择一个合适的计谋然后去执行就可以了。
设计锦囊类和接口
public interface Strategyzhugeliang {
//这里是诸葛亮提供锦囊方法
public abstract void strategy();
}
public class StrategyTian implements Strategyzhugeliang {
@Override
public void strategy() {
System.out.println("天计谋:炭烤沙丁鱼祭天,引来雷劫(滑稽)");
}
}
public class StrategyDi implements Strategyzhugeliang {
@Override
public void strategy() {
System.out.println("地计谋:指挥沙丁鱼挖陷阱,");
}
}
public class StrategyRen implements Strategyzhugeliang {
@Override
public void strategy() {
System.out.println("人计谋:沙丁鱼群直接总攻");
}
}
实施锦囊
//拿到了锦囊,要有个执行的人,这个就是执行者
public class StrategyUser{
//usestrategy指锦囊计谋
private Strategyzhugeliang usestrategy;
//匹配对应的锦囊
public StrategyUser(Strategyzhugeliang choosestrategy){
this.usestrategy=choosestrategy;
}
//使用里面的计谋
public void Use(){
usestrategy.strategy();
}
}
//具体的真正实施
public class StrategyTest {
public static void main(String[] args) {
//执行者
StrategyUser user;
//执行计谋
System.out.print("第一种执行:");
user=new StrategyUser(new StrategyTian());
user.Use();
System.out.print("第二种执行:");
user=new StrategyUser(new StrategyDi());
user.Use();
System.out.print("第三种执行:");
user=new StrategyUser(new StrategyRen());
user.Use();
System.out.print("最后沙丁鱼获得了胜利");
}
}