当前位置: 首页 > 知识库问答 >
问题:

如何使用策略或功能接口处理基于值(enum)的多项选择?

公孙新觉
2023-03-14

我正在处理一个具有枚举的情况:

public enum CurrencyType {
    BTC, ETH
}
public class Challenge {
    private final String walletAddress;
    private final CurrencyType currencyType;
    //getters, constructors, setters
}
@Service
public ChallengeService {
   public Challenge verifyMessage(final Challenge challenge) {
           Challenge verifiedChallenge;
       switch (challenge.getCurrencyType()) {
           case BTC:
               verifiedChallenge = verifyBTCMessage(challenge);
               break;
           case ETH:
               verifiedChallenge = verifyETHMessage(challenge);
               break;
           default:
               throw new IllegalStateException("Unexpected value: " + challenge.getCurrencyType());
       }
    return verifiedChallenge;
    }

    private Challenge verifyBTCMessage(Challenge challenge) { //implementation here }

    private Challenge verifyETHMessage(Challenge challenge) { //implementation here }

}

在refactoring guru上阅读策略模式时,我发现了这些信息(在策略模式的缺点一节中)

A lot of modern programming languages have functional type support that lets you implement different versions of an algorithm inside a set of anonymous functions.

这似乎是一个更好的方法,但是...我正处于学习函数式编程的初学者阶段,老实说--我不知道从哪里开始。或者也许策略模式已经足够了,但我错过了一些关键的东西?我所要达到的目的就是尽可能地摆脱开关。

共有1个答案

丘智志
2023-03-14

我想这可以按以下方式实现:

interface Verifier {
     boolean isMatched(CurrencyType type);
     CurrencyType currency();
     Challenge verify(Challenge challenge);
}

每个具体的类将用于/匹配特定的货币。

 类似资料:
  • 我有这样的场景,当点击一个按钮时,它打开了一个基于PDF文件的窗口: 我使用的是Gecko驱动程序版本-21.0Firefox版本-61.0.1 Selenium独立服务器-3.13 我无法切换到基于PDF文件的窗口获取错误: 我想用最新的壁虎驱动程序-21.0来处理它

  • 为了丰富运营体验,让开发者更好的体验积分商城功能,兑吧提支持更多的扩展功能 . 支持的扩展功能包含: 1. 游客用户唤醒登录 2. 自有虚拟商品充值 接口说明 充值接口API文档 通知接口API文档 3.加积分接口 接口说明 API文档 4.免登URL自定义参数 dcustom参数 transfer参数 signKeys参数 5. 会员等级功能 6.前置商品查询接口 7. 【秒杀商品】前置查询接口

  • 开发者只需对接完成免登接口、扣积分接口和兑换结果通知接口三个必选接口即可实现商城的基本功能,包括兑换商品,发布积分商城活动等 1.免登录地址接口 用户通过服务端生成的免登录url跳转到积分商城 接口说明 API文档 常见问题 2.扣积分接口 用户点击马上兑换,兑吧向开发者发起兑换请求,开发者进行json响应 接口说明 API文档 常见问题 3.兑换结果通知接口 兑吧把订单的状态通知给开发者,开发者

  • 我是钥匙斗篷大一新生。我想使用KeyCloak的authorizaion系统创建一个相当简单的基于组的访问控制系统。我尝试配置基于组的策略,但失败了,步骤如下: 1.创建一个“用户”的组名;2.配置资源、范围等;3.将策略设置为基于组的策略,但在这一步中,这是关于“Groups claim”的混淆,“Groups claim”的描述是:“一个用作用户组源的声明。如果声明存在,它必须是一个字符串数组

  • 主要内容:1.死锁无知,2.死锁预防,3.避免死锁,4.死锁检测和恢复1.死锁无知 死锁无知是所有机制中使用最广泛的方法。 许多操作系统主要为最终用户使用。 在这种方法中,操作系统假定永远不会发生死锁。 它只是无视死锁。 这种方法最适合用户使用系统仅用于浏览和所有其他常规内容的单个最终用户系统。 正确性和性能之间总是有一个折衷。 Windows和Linux等操作系统主要关注性能。 但是,如果死锁发生的次数是100次,那么系统的性能就会一直下降,如果它始终使用死锁处理

  • 问题内容: 基于python,用pandas排序降序数据框: 鉴于: df如下所示: 我想要类似的东西: 这应该相对于列“ x”和“ y”的平方值的总和来排序完整的数据框,然后给我: 升序或降序无关紧要。有没有一个简单而好的方法?我找不到解决方案。 问题答案: df.iloc[(df.x 2 + df.y 2).sort_values().index] 在如何根据字符串索引上的自定义顺序对熊猫数据