2021-07-16-【策略模式】

什么是策略模式?

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
就如你去泡妞:不同的小姐姐性格不同喜欢做的事情不同 【如:小菲温柔,喜欢撸猫 、小美活泼,喜欢打球;你约不同的妹子去玩,就会有不同的体验】

策略模式案例

举个实际的例子,如:小菲温柔,喜欢撸猫 、小美活泼,喜欢打球;你约不同的妹子去玩,就会有不同的体验,这时候策略模式就派上用场了

  1. 定义策略接口:

策略接口:

**
 * 玩耍接口
 * @author: zyy
 */
public interface play{
    /**
     * 玩
     * @param People 
     * @return
     */
    PlayResult play(People people);

}

人物类:

/**
 * 人物信息
 * @author: zzy
 */
@Data
public class People {
    /**
     * 人物性格
     */
    private String character;

    /**
     * 人物名称
     */
    private String name;

}

结果集类:

/**
 * @author: zzy
 */
@Data
@AllArgsConstructor
public class PlayResult {
    /**
     * 玩耍活动
     */
    private String result;
}
  1. 定义策略实现类:

和小菲实现:

/**
 * 和小菲
 * @author: zzy
 */
@Service("XiaoFei ")
public class XiaoFei implements Play{

    @Override
    public PlayResult play(People people ) {
        return new PayResult("撸猫活动");
    }

}

和小美实现:

/**
 * 小美
 * @author: zzy
 */
@Service("XiaoMei")
public class XiaoMei implements Play{

    @Override
    public PayResult play(People people ) {
        return new PayResult("打球");
    }

}

这里我把所有和谁玩的类都用 @Service 注解生成 Bean 放入 Spring Bean 容器中了,在使用策略的时候就不用 new 支付对象了,可以直接使用 Bean,这样更贴近业务。

  1. 使用策略:

编写玩耍服务代码:

/**
 * 玩耍服务
 * @author: zzy
 */
@RestController
public class PlayService {

    @Autowired
    private ApplicationContext applicationContext;

    /**
     * 玩耍接口
     * @param character
     * @param name
     * @return
     */
    @RequestMapping("/play")
    public PayResult play(@RequestParam("character") String character,
                    @RequestParam("name") String name) {
        People people = new People ();
        people .setCharacter(character);
        people .setName(name);

        // 根据人物名称获取对应的策略 bean
        Play play= applicationContext.getBean(people .getName(), Play.class);

        // 玩耍活动
        PayResult payResult = payment.pay(people);

        return payResult;
    }

}

测试结果:

http://localhost:8080/pay?character=温柔&name=XiaoFei

{"result":"撸猫活动"}

http://localhost:8080/pay?character=活泼&name=XiaoMei

{"result":"打球"}

策略模式总结

模式优点:

1、干掉繁琐的 if、switch 判断逻辑;

2、代码优雅、可复用、可读性好;

3、符合开闭原则,扩展性好、便于维护;

模式缺点

1)客户端必须知道所有策略类,并自行决定使用那个策略类。

2)策略模式将造成产生很多策略类和对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值