设计模式之策略模式

一句话总结

我有选择恐惧症 你别让我一个一个挑 我给你说需求 你帮我挑好

选择恐惧症

  • 选择恐惧症

选择恐惧症 说明了能选择的不止一个 (对应的策略不止一个)
每一个策略对应一个类

  • 我给你说需求

这个地方我刚开始也不理解 刚开始学习的时候就知道需要那个策略直接NEW 就行了
我怎么知道该New 那一个 难道要if else 判断 如果是这样 那还用啥策略模式?
这个时候你会想到 就算 判断 是不是有个判断的依据 如 下图 这里的paymentType
不就是我要的需求吗 ?
我给你个paymentType 你给我个类不就行了

    if ("支付宝".equals(paymentType)) {

        } else if ("微信".equals(paymentType)) {
    
        }
  • 你帮我挑好

这里的你 该如何定义类?
上文提到的一对一的关系是不是想到了 map (还有人用枚举类)
如果你是spring的项目 也可以用applicationContext 获取不同的bean对象(下面会有案例)

这样一分析是不是策略模式的主要角色都出来了。

抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
具体策略(Concrete Strategy)类:(上文中的具体的选择)实现了抽象策略定义的接口,提供具体的算法实现。
环境(Context)类:(上文中的你)持有一个策略类的引用,最终给客户端调用。

类图

在这里插入图片描述
细心的小伙伴会发现 这和状态模式类图很像如下图
这不是像简直一摸一样 这里先不讨论他俩的区别 详细的看https://www.runoob.com/w3cnote/state-vs-strategy.html
在这里插入图片描述

策略模式之皇上选妃

抽象策略(Strategy)类

/**
 * 抽象妃子类
 */
public interface ImperialConcubine {
   
    void exhibition();//妃子展示才艺
}

具体策略(Concrete Strategy)类

/**
 * 身材好的
 */
public class Figure implements ImperialConcubine {
   
    private String name;
    private String characteristic;

    public Figure(String name, String characteristic) {
   
        this.name = name;
        this.characteristic = characteristic;
    }

    @Override
    public void exhibition() {
   
        System.out.println(this.name + "低头不见脚尖");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶一菩提魁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值