一起学设计模式-策略模式

版权声明:转载请注明出处 https://blog.csdn.net/weixin_36524613/article/details/84438841

一、模式介绍

       策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。

       策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

       策略模式是一种对象行为型模式。

二、模式结构

三、模式代码

    1、抽象策略接口

package com.example.demo.strategy;
//策略接口
public interface Strategy {
    public String doScheme(String name,String scheme);
}

    2、具体策略美人计

package com.example.demo.strategy;

//美人计
public class Beauty implements Strategy{
    @Override
    public String doScheme(String name,String scheme) {
        String all = scheme+"    "+"eg:"+name;
        return "美人计:" + all;
    }
}

    3、具体策略苦肉计

package com.example.demo.strategy;

//苦肉计
public class BitterMeat implements Strategy{
    @Override
    public String doScheme(String name,String scheme) {
        String all = scheme+"    "+"eg:"+name;
        return "苦肉计:" + all;
    }
}

    4、具体策略空城计

package com.example.demo.strategy;

//空城计
public class EmptyCity implements Strategy{

    public String doScheme(String name,String scheme) {
        String all = scheme+"    "+"eg:"+name;
        return "空城计:" + all;
    }
}

    5、创建上下文

package com.example.demo.strategy;

//上下文
public class Context {
    private Strategy strategy;

    public Context(Strategy strategy){
        this.strategy = strategy;
    }

    public String executeStrategy(String name,String scheme){
        return strategy.doScheme(name, scheme);
    }
}

    6、 模拟调用各策略

package com.example.demo.strategy;

//调用策略
public class Main {
    public static void main(String[] args) {
        Context context = new Context(new EmptyCity());
        System.out.println(context.executeStrategy("诸葛亮",
                "虚而示虚的疑兵之计,是一种疑中生疑的心理战,多用于己弱而敌强的情况。"));

        context = new Context(new BitterMeat());
        System.out.println(context.executeStrategy("三十六计",
                "自己伤害自己,以蒙骗他人,从而达到预先设计好的目标。"));


        context = new Context(new Beauty());
        System.out.println(context.executeStrategy("王允,貂蝉之义父",
                "它是利用色情、出卖肉体的方法,以女性勾引男性对象,以男性勾引女性对象,进行间谍情报活动。"));
    }
}

    7、打印结果

扫描二维码关注公众号,回复: 4213292 查看本文章

四、使用情景

    完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。

    1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。
    2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
    3、登录认证,现在需要登录linux、Windows、mac、认证数据库。每种认证方式可以封装一个策略。

五、优缺点

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、客户端必须知道所有策略类,并自行决定使用哪一种策略类。2、如果算法较多,则会造成很多的策略类。

六、demo地址

https://github.com/tongyuxin1/designModel/tree/master/src/main/java/com/example/demo

猜你喜欢

转载自blog.csdn.net/weixin_36524613/article/details/84438841