首页 > 其他分享 >记录常用设计模式

记录常用设计模式

时间:2023-09-21 21:58:25浏览次数:42  
标签:常用 code uid 记录 玩法 param participateUserConfigDto 设计模式 public

策略模式+工厂模式

1.四种玩法,玩法出入参类型一致,根据类型区分具体玩法。

/**
 * 玩法枚举类
 *
 * @author jiangym
 * @version 1.0
 * @date 2022/9/28 20:10
 */
public enum TricksEnum {

    /**
     * vip身份用户
     */
    VIP_USER(1, "vip身份用户"),
    /**
     * 全站用户
     */
    USER_ALL(2, "全站用户"),
    /**
     * 历史充值累充用户
     */
    HISTORY_CHARGE_USER(3, "历史充值累充用户"),
    /**
     * 充值活动白名单用户
     */
    ACTIVITY_WHITE_USER(4, "充值活动白名单用户"),
    ;


    /**
     * 序号
     */
    private final int code;
    /**
     * 描述
     */
    private final String msg;
    
    public String msg() {
        return msg;
    }
    
    public int code() {
        return code;
    }

    TricksEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

}
TricksEnum 玩法枚举
/**
 * 玩法工厂类
 * @author jiangym
 * @version 1.0
 * @date 2022/8/16 10:00
 */
public class TricksHandlerFactory {

    /**
     * HashMap,存放AppName,具体handler
     */
    private static final HashMap<Integer, TricksStrategy> strategyMap = Maps.newHashMap();

    /**
     * 通过对象获取对应的策略类
     * @param type
     * @return
     */
    public static TricksStrategy getInvokeStrategy(Integer type) {
        return strategyMap.get(type);
    }

    /**
     * 将策略类put进HashMap
     * @param type
     * @param handler
     */
    public static void register(Integer type, TricksStrategy handler) {
        if (type == null || type <= 0 || handler == null) {
            return;
        }
        strategyMap.put(type,handler);
    }
}
玩法工厂
/**
 * 玩法 策略模式  现有玩法:白名单、全站、VIP、历史累充
 * 策略模式+工厂模式
 * @author jiangym
 * @version 1.0
 * @date 2022/8/19 11:19
 */
public interface TricksStrategy extends InitializingBean {

    /**
     * 处理四种玩法的充值消息
     * @param uid
     * @param realAmount
     * @param participateUserConfigDto
     */
    void tricksChargeLogic(Long uid, Integer realAmount, ParticipateUserConfigDto participateUserConfigDto, UcParamVO userUcParamVO);

    /**
     * 校验四种玩法是否可以参与 当前用户
     * @param uid
     * @param participateUserConfigDto
     * @param appName
     * @return
     */
    String tricksCheckUserCanParticipate(Long uid, ParticipateUserConfigDto participateUserConfigDto, String appName);
}
策略接口
/**
 * @author jiangym
 * @version 1.0
 * @date 2022/9/28 20:04
 */
@Slf4j
@Component
public class ActivityWhiteUserHandler implements TricksStrategy {

    @Resource
    private ChargeGiftService chargeGiftService;

    @Override
    public void afterPropertiesSet() {
        TricksHandlerFactory.register(TricksEnum.ACTIVITY_WHITE_USER.code(),this);
    }

    @Override
    public void tricksChargeLogic(Long uid, Integer realAmount, ParticipateUserConfigDto participateUserConfigDto, UcParamVO userUcParamVO) {
        chargeGiftService.dealWhiteChargeLogic(uid, realAmount, participateUserConfigDto, userUcParamVO);
    }

    @Override
    public String tricksCheckUserCanParticipate(Long uid, ParticipateUserConfigDto participateUserConfigDto, String appName) {
        return chargeGiftService.checkWhiteParticipate(uid, participateUserConfigDto, appName);
    }
}
某种玩法的实现类 在构造方法里调用工厂,传当前玩法对象
    /**
     * 遍历马甲包的配置里的每个配置 判断是否 当前充值逻辑 可以参与活动
     * @param uid
     * @param userUcParamVO
     * @param realAmount
     * @param participateUserConfigId
     */
    private void ergodicConfigDealCharge(Long uid, UcParamVO userUcParamVO, Integer realAmount, int participateUserConfigId) {
        List<ParticipateUserConfigDto> participateUserConfigDtoList = getParticipateUser(participateUserConfigId);
        for (ParticipateUserConfigDto participateUserConfigDto : participateUserConfigDtoList) {
            if (participateUserConfigDto.getIsJoin() == null ||participateUserConfigDto.getIsJoin() != PARTICIPATE) {
                continue;
            }
            TricksStrategy tricksStrategy = TricksHandlerFactory.getInvokeStrategy(participateUserConfigDto.getIdType());
            if (tricksStrategy != null) {
                tricksStrategy.tricksChargeLogic(uid, realAmount, participateUserConfigDto, userUcParamVO);
            }
        }
    }
入口方法 根据工厂获取对象,执行对象里的实现类。

 

装饰器模式  

抽象类 ABattercake

具体实现类  Battercake继承 抽象类

装饰类 加鸡蛋加肠继承 抽象类的具体类 AbstractDecorator

装饰的类通过 父类里声明的batterCake , 在其方法里添加具体的装饰。

 

 

 

模板模式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考:

美团公众号

Java设计模式精讲 Debug方式+内存分析

 

标签:常用,code,uid,记录,玩法,param,participateUserConfigDto,设计模式,public
From: https://www.cnblogs.com/jiangym/p/17590157.html

相关文章

  • MFC-GUI常用API
    替换m_comboSNCodeRandom.ResetContent();m_comboSNCodeRandom.AddString("数字0-9");m_comboSNCodeRandom.AddString("大写字母A-Z");m_comboSNCodeRandom.AddString("小写字母a-z");m_comboSNCodeRandom.InsertString(0,"数字0-9");m_comb......
  • 常用的内置模块
    时间模块这个模块我们就比较熟悉了,之前学的时候调用过内部的几个功能三种时间表现形式1.时间戳(timestamp)返回秒数。通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。2.结构化时间(struct_time)主要是给......
  • 日常记录--day8--2023-9月21日--周四
    日程:今天满课,累死了,早上7点起床,吃早饭,去上课。上午体测,跑了个一千米,差点没去世,下午数据结构加离散数学,今天主要学了栈,写了个简单的,晚上8-9点继续javaweb,今天也没有力扣。学了什么:Javaweb让人头疼,复习了之前的力扣题,继续学习Javaweb。PS:不想学习,想要成为卫生纸;......
  • 记录一下前端缓存分类汇总(indexDB、localStorage、sessionStorage)
    什么是缓存?当我们第一次访问网站的时候,比如juejin.cn,电脑会把网站上的图片和数据下载到电脑上,当我们再次访问该网站的时候,网站就会从电脑中直接加载出来,这就是缓存。缓存的优点和应用场景Web缓存种类:indexDB、localStorage、sessionStorage。缓解服务器压力,不用每次都去请......
  • netbeans19常用快捷方式
    Ctrl+Shift+1在项目窗口中选中当前文件Ctrl+Shift+2在文件窗口中选中当前文件Ctrl+X在编辑器中删除当前光标所在的行Ctrl+/开关注释Ctrl+Shift+方向上下键向上/下复制当前光标所在行或者选中的多行Alt+Shift+方向上下键向上/下移动当前光标所在行或......
  • 9月做题记录
    Part1.图论 1.分层图最短路 P3119[USACO15JAN]GrassCownoisseurG主要是需要缩点,分层图最短路就比较板了。#include<bits/stdc++.h>usingnamespacestd;constintN=500005;//要先缩点!intn,m,h[N],e[N],ne[N],idx=1,deg[N],f[N];intdfn[N],low[N],tmp,q[N]......
  • 萌新学习C语言记录
    今天在牛客网上写了几道题有一个题是把几个十位数字放到一个集合中一开始用char%c发现只能输出十位数字,个位数字被吞掉了之后又用了int%d发现成功把几个十位数字放到一个集合中这可能就是新手常犯的错误了吧......
  • 软件设计模式系列之十一——装饰模式
    当谈到设计软件系统时,经常需要考虑如何使系统更加灵活、可扩展和易维护。设计模式是一种被广泛采用的方法,用于解决常见的设计问题,并提供了一套可重用的解决方案。装饰模式(DecoratorPattern)是一种结构型设计模式,它允许您在不改变对象接口的情况下动态地添加对象的功能或责任。在本......
  • 设计模式
    1.设计模式分为:设计:a.就是设计原则b.设计模式的来源依据,是怎么来的.c.是一种指导思想.什么是设计?a.设计按照哪一种思路或标准来实现功能.b.根据指导思想,结合开发经验总结的"模板".c.关联:从设计到模式.为什么有设计?a.功能相同,但有不同的实现方案.b.前提是......
  • STM32学习——缩写记录
     GPIOGeneralPurposeInputOutput通用输入/输出端口每个GPIO端口可通过软件分别配置成输入或输出;输出又分为推挽式(Push-Pull)和开漏式(Open-Drain)USARTUniversalSynchronous/AsynchronousReceiver/Transmitter通用同步/异步串行接收/发送器支持全双工操作;可设置波特......