HeadFirst笔记01:策略模式

策略模式是什么?

策略(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("最后沙丁鱼获得了胜利");
    }
}

HeadFirst笔记01:策略模式_第1张图片

你可能感兴趣的:(HeadFirst设计模式)