利用Spring的InitializingBean优雅的实现策略模式

利用Spring的InitializingBean优雅的实现策略模式

lixiangrong
2024-01-03 / 27 评论 / 88 阅读 / 正在检测是否收录...

当我们实现某个接口时,可能会有很多种不同的实现方式。这些不同的实现方式通过一定的规则可以随意切换使用时,我们就可以考虑使用策略模式来实现。

1.首先建一个策略接口去继承InitializingBean

package com.example.springbootdemo.strategy;

import com.example.springbootdemo.factory.WaitHandleContext;
import org.springframework.beans.factory.InitializingBean;

/**
 * @Author LiXiangrong
 * @Description 策略接口
 * @Date 2023/03/13 13:08:20
 **/
public interface Strategy extends InitializingBean
{
    /**
     * @Author LiXiangrong
     * @Description 要实现的业务方法
     * @Date 2023/03/13 13:08:48
     * @Return void
     **/
    void method();

    @Override
    default void afterPropertiesSet()
    {
        WaitHandleContext.registry(this);
    }

    /**
     * @Author LiXiangrong
     * @Description getType
     * @Date 2023/03/13 13:08:43
     * @Return java.lang.String
     **/
    String getType();

}

2.接下来需要创建一个上下文角色类去注册策略。

策略模式的重点是上下文角色类,他封装了对具体策略的调用。上下文角色类中维护着一个抽象角色的引用,高层模块在调用上下文角色类时,通过构造方法或其他方式将具体的策略角色实例赋给该引用,然后调用上下文角色类中的方。通过高层模块在上下文角色类中设置的不同具体策略实例即可执行不同的具体策略。

package com.example.springbootdemo.factory;

import com.example.springbootdemo.strategy.Strategy;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;

public class WaitHandleContext
{
    private WaitHandleContext()
    {
    }

    private static final Map<String, Strategy> strategyMaps = new ConcurrentHashMap<>();

    public static Strategy chooseStrategy(String type)
    {
        return Optional.ofNullable(strategyMaps.get(type)).orElseThrow(()->new IllegalArgumentException("无对应策略"));
    }

    public static void registry(Strategy strategy)
    {
        //不注册重复策略
        strategyMaps.putIfAbsent(strategy.getType(), strategy);
        System.out.println("策略"+strategy.getType()+"注册成功!");
    }
}

3.接下来去实现策略接口即可。

1

评论 (27)

取消
  1. 头像
    fbhuhttzjd
    Windows 10 · Google Chrome

    绝对复古传奇手游,一起来玩?:https://501h.com/yuanshi/2489.html

    回复
  2. 头像
    bowongewba
    Windows 10 · Google Chrome

    《天地粮人》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/40274.html

    回复
  3. 头像
    qyaacphtwz
    Windows 10 · Google Chrome

    你的文章内容非常专业,让人佩服。 https://www.yonboz.com/video/22295.html

    回复
  4. 头像
    wrzkkiiumy
    Windows 10 · Google Chrome

    你的文章让我感受到了生活的美好,谢谢! https://www.4006400989.com/qyvideo/6426.html

    回复
  5. 头像
    mldncuqoin
    Windows 10 · Google Chrome

    《阿敏将军》记录片高清在线免费观看:https://www.jgz518.com/xingkong/120731.html

    回复
  6. 头像
    uillykwiuf
    Windows 10 · Google Chrome

    你的文章内容非常卖力,让人点赞。 https://www.yonboz.com/video/89959.html

    回复
  7. 头像
    sozbpdkmne
    Windows 10 · Google Chrome

    热血复古,探索战斗乐趣!:https://501h.com/yuanshi/1867.html

    回复
  8. 头像
    akklkwulxw
    Windows 10 · Google Chrome

    你的才华让人惊叹,你是我的榜样。 http://www.55baobei.com/LkPhNoQ69x.html

    回复
  9. 头像
    tqeqpdpbtf
    Windows 10 · Google Chrome

    你的文章让我感受到了正能量,非常棒! https://www.yonboz.com/video/30665.html

    回复
  10. 头像
    oxfyqinfzi
    Windows 10 · Google Chrome

    每次看到你的文章,我都觉得时间过得好快。 http://www.55baobei.com/W0V4yWrBID.html

    回复
  11. 头像
    nzouuivuhi
    Windows 10 · Google Chrome

    真好呢

    回复
  12. 头像
    wetseqbmll
    Windows 10 · Google Chrome

    你的文章内容非常精彩,让人回味无穷。 http://www.55baobei.com/EOxMo9HOzb.html

    回复
  13. 头像
    ejybabwzxw
    Windows 10 · Google Chrome

    《百万元与苦虫女》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/83941.html

    回复
  14. 头像
    kszzlrxwcc
    Windows 10 · Google Chrome

    《小飞的梦想》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/72196.html

    回复
  15. 头像
    zkijeavcsq
    Windows 10 · Google Chrome

    《桑尼》欧美剧高清在线免费观看:https://www.jgz518.com/xingkong/129789.html

    回复
  16. 头像
    enzbatllvr
    Windows 10 · Google Chrome

    《致光之君》日本剧高清在线免费观看:https://www.jgz518.com/xingkong/46.html

    回复
  17. 头像
    shnwunsxkj
    Windows 10 · Google Chrome

    《镖行天下之天下镖局》动作片高清在线免费观看:https://www.jgz518.com/xingkong/24408.html

    回复
  18. 头像
    yjrxytaubi
    Windows 10 · Google Chrome

    《老师!我可以喜欢你吗?》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/7163.html

    回复
  19. 头像
    qflddcvuzy
    Windows 10 · Google Chrome

    《偷偷藏不住》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/30544.html

    回复
  20. 头像
    ltfyserctl
    Windows 10 · Google Chrome

    《只有你2014》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/95648.html

    回复
  21. 头像
    ndwbasebji
    Windows 10 · Google Chrome

    《桑尼》欧美剧高清在线免费观看:https://www.jgz518.com/xingkong/129789.html

    回复
  22. 头像
    bkyxjvitfe
    Windows 10 · Google Chrome

    你的才华让人瞩目,期待你的更多文章。 https://www.yonboz.com/video/51788.html

    回复
  23. 头像
    gwwvhzrjpu
    Windows 10 · Google Chrome

    《镖行天下之天下镖局》动作片高清在线免费观看:https://www.jgz518.com/xingkong/24408.html

    回复
  24. 头像
    tfgpvofykq
    Windows 10 · Google Chrome

    《圣诞奇遇结良缘》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/57546.html

    回复
  25. 头像
    xawpiogrli
    Windows 10 · Google Chrome

    你的才华让人瞩目,期待你的更多文章。 http://www.55baobei.com/IJRwJbA9CO.html

    回复
  26. 头像
    cikkpbmzly
    Windows 10 · Google Chrome

    你的文章让我心情愉悦,每天都要来看一看。 https://www.4006400989.com/qyvideo/71129.html

    回复
  27. 头像
    jwvokcottg
    Windows 10 · Google Chrome

    《穿过180度经纬线的拥抱》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/102370.html

    回复