13设计模式-行为型模式-策略模式

概述

策略(Strategy)模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。属于对象行为模式。
在这里插入图片描述
策略模式的主要角色如下。
抽象策略(Strategy)类:公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
环境(Context)类:持有一个策略类的引用,最终给客户端调用。

讲人话

  • 1、是讲某一种事件中的各种行为抽象到接口中,对于不同的人干这同一种事情会有不同的结果。
  • 2、电商整个环境去不同的渠道干同样的事:抽象下单,售后,物流,商品同步。。。
  • 3、代码模拟,以吃鸡的m4和awm为例

coding

package com.xusj.future.behavioral.strategy;

/**
 * 抽象出策略,抽象出具体的一些行为,游戏中枪
 *
 * @author xusj
 * <br>CreateDate 2022/8/5 23:38
 */
public interface GameStrategy {
    /**
     * 打架
     */
    void fight();

    /**
     * 防御
     */
    void defense();
}

package com.xusj.future.behavioral.strategy;

/**
 * 枪。m4
 *
 * @author xusj
 * <br>CreateDate 2022/8/5 23:41
 */
public class M4a1strategy implements GameStrategy {
    @Override
    public void fight() {
        System.out.println("我是枪m4战斗力");
    }

    @Override
    public void defense() {
        System.out.println("m4防御值");
    }
}

package com.xusj.future.behavioral.strategy;

/**
 * 枪AWM
 *
 * @author xusj
 * <br>CreateDate 2022/8/5 23:42
 */
public class AwmStrategy implements GameStrategy {
    @Override
    public void fight() {
        System.out.println("我是AWM战斗力111000000000");
    }

    @Override
    public void defense() {
        System.out.println("我是AWM防御力111000000000");
    }
}

package com.xusj.future.behavioral.strategy;

/**
 * 环境游戏类,组合策略。环境类重要,后面都是通过环境类来执行策	    略的
 *
 * @author xusj
 * <br>CreateDate 2022/8/5 23:45
 */
public class ContextGame {
    // 属性组合
    private GameStrategy gameStrategy;

    // 构造器多态
    public void setGameStrategy(GameStrategy gameStrategy) {
        this.gameStrategy = gameStrategy;
    }

    public void startGame() {
        System.out.println("游戏开始.....");
        //游戏策略
        gameStrategy.fight();
        gameStrategy.defense();
        System.out.println("win......");
    }
}

package com.xusj.future.behavioral.strategy;

/**
 * @author xusj
 * <br>CreateDate 2022/8/5 23:48
 */
public class MainTest {
    public static void main(String[] args) {
        // 使用环境类去完成不同的策略
        ContextGame contextGame = new ContextGame();
        // 策略一
        contextGame.setGameStrategy(new M4a1strategy());
        contextGame.startGame();
        // 策略二
        contextGame.setGameStrategy(new AwmStrategy());
        contextGame.startGame();

    }
}

使用场景

什么场景用到?
使用策略模式可以避免使用多重条件语句,如 if…else 语句、switch…case 语句
什么是Spring的 InstantiationStrategy
线程池拒绝策略

总结

策略模式本身比较好理解,但通常其并不单独使用,而是结合工厂模式进行使用,本文中的实例利用枚举,其实也是工厂的一种简单表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值