策略模式 函数式编程-代替if else

本文介绍了如何使用策略模式和函数式编程来替代传统的if else语句。通过定义Map将不同的操作映射到特定的方法上,实现了动态调用不同处理逻辑。以User对象为例,创建了Function类型的Map,以及对应的vipDosomething、svipDosomething和csvipDosomething方法,确保参数和返回值与Map中的定义一致。对于不带返回值的情况,可以使用Consumer进行处理。

带返回值的用

Function

不带返回值的用

Consumer

先说 Function

比如我进来一个List数据 或者一个String 字符串  ,要根据某个字段的值来进行 if else

第一步定义一个 map

private final Map<String, Function<入参,返回参数>> userMap= new HashMap<>();

private final Map<String, Function<User, String>> userMap= new HashMap<>();

User 就是参数,String  是返回值。,参数和返回值都可以随意定义 但是要与实现方法中保持一致

第二步

创建一个方法。这个方法就是 被调用的。比如 从 Controller 里 调他。这里是入口

public String createUser(User param) {
   
    Function<User,String> lisenner = userMap.get(param.getExpress_code());

    return lisenner.apply(param);
}

第三步

@PostConstruct
public void dispatcherInit() {
    userMap.put("vip",this::vipDosomething);
    userMap.put("svip",this::svipDosomething);
    userMap.put("csvip",this::csvipDosomething);
                ......
}

第四步

定义你的方法

public String vipDosomething(User user){

       // doSomething

        return "";

}

public String svipDosomething(User user){

       // doSomething

        return "";

}

public String csvipDosomething(User user){

       // doSomething

        return "";

}

注意的是  参数和返回值与 userMap 保持一致

不带返回值的用Consumer

private final Map<String, Consumer<Map<String,Object>>> map= new HashMap<>();

红色的是参数,可以随意定义 我这里需要这样一个对象

方法

public void orderPontJS(Map<String,Object> map) {

        //doSomething
        
}
### R语言中 `if` 和 `else` 的基本用法 在编程领域,`if` 和 `else` 是控制流程的关键结构之一。它们允许程序根据特定条件执行不同的代码块。以下是关于 `if` 和 `else` 结构的基本介绍以及如何在R语言中使用它。 #### 条件语句基础 `if` 语句用于测试某个条件是否成立,并据此决定是否执行某段代码。而 `else` 则提供了另一种选择,在前一个条件未满足时执行另一段代码[^3]。 #### 基础语法 ```r if (condition) { expr1 } else { expr2 } ``` 其中: - `condition`: 表达式的结果必须是一个逻辑值 (`TRUE` 或 `FALSE`)。 - `expr1`, `expr2`: 当条件为真或假时分别要执行的表达式。 #### 示例代码 考虑以下简单的例子来演示 `if...else` 的功能: ```r age <- as.integer(readline(prompt="请输入您的年龄: ")) if(age >= 18){ print("您已成年") }else{ print("您未成 年") } ``` 这段代码首先提示用户输入他们的年龄,然后检查这个年龄是否大于等于18岁。如果是的话,打印一条消息表示他们已经是成年人;如果不是,则给出相反的消息[^3]。 #### 多重判断扩展 对于更复杂的情况,可以嵌套多个 `if...else` 或者利用 `switch` 或者像前面提到过的 `case_when()` 函数来进行更加灵活的数据处理[^1]。 例如,当我们想要根据不同分数区间给予不同等级评价的时候: ```r score <- as.numeric(readline(prompt="请输入成绩(0-100): ")) grade <- if(score >= 90){ 'A' } else if(score >=70 && score <90 ){ 'B' } else if(score >=60 && score<70 ){ 'C' } else { 'D' } print(paste('您的成绩属于:', grade)) ``` 这里我们连续使用了几个 `if...else if...else` 构造了一个分级体系。 另外值得注意的是,在某些高级应用场景下,为了提高代码可读性和维护性,可能会采用函数式编程的思想代替传统的 `if...else` 流程控制方式[^4]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值