优雅的使用if else

17 篇文章 0 订阅

简单的if(){} else if(){} 还好,就怕if {}else if()的里面给你整个俄罗斯套娃。画面太美:

// 判断书本状态 
private void testIf(String status){
        if("prepare".equals(status)){
            if("..".equals(status)){
                System.out.println("..");
            }
            
        }else if("done".equals(status)){
            System.out.println("done");
        }else if("read".equals(status)){
            System.out.println("read");
        }

    }

等到上面的场景编程 20多个状态时候,有没有火葬场的感觉,修改一次岂不是会被坑死。

有人就说了,引入switch啊 其实么有什么差别还是太多行。

那引入卫模式呢  位模式个人感觉是减少了else 语句,代码看起来更简洁一点:

上面代码的卫模式:

private void testWei(String stauts){
        if("prepare".equals(stauts)){
            System.out.println("prepare");
            return;
        }
        if("done".equals(stauts)){
            System.out.println("done");
            return;
        }
        if("read".equals(stauts)){
            System.out.println("read");
            return;
        }
    }

也是可以,但这种过多的修改也不方便。

使用枚举 + 接口:

像这种状态类的都可以封装成enum类型 并抽象接口 进行操作 ,就是啥干啥,相互对应

1、定义公共接口 

public interface BookOperation {
    // 操作
    void op();
}

2、定义枚举 实现 该接口

public enum BookEnum  implements  BookOperation{

    // 待读状态
    PREPARE{
        @Override
        public void op() {
            System.out.println("prepare");
        }
    },

    // 读完
    DONE{
        @Override
        public void op() {
            System.out.println("done");
        }
    },
    // 在读
    READ{
        @Override
        public void op() {
            System.out.println("read");
        }
    }


}

3、使用 

使用时候就直接传入 该枚举对象就行了

private void testEnum(BookEnun bookEumn){
        bookEumn.op();  // op进行相应操作
    }

而且这种在新增新的book操作状态时,只需要在BookEnum中增加新的枚举即可。

除了枚举还有 工厂模式和策略模式

工程模式

定义角色 :

class PrepareOp implements BookOperation{

    @Override
    public void op() {
        System.out.println("prepare");
    }
}

class ReadOp implements BookOperation{

    @Override
    public void op() {
        System.out.println("read");
    }
}
class DoneOp implements BookOperation{

    @Override
    public void op() {
        System.out.println("done");
    }
}

定义工厂 BookFactory:

public class BookFactory {

    static Map<String,BookOperation> map = new HashMap<>();
    // map初始化
    static {
        map.put("prepare",new PrepareOp());
        map.put("done",new DoneOp());
        map.put("read",new ReadOp());
    }

    public static BookOperation  getBookOp(String bookStatus){
        return map.get(bookStatus);
    }

}

使用

//工厂模式
    private void testFactory(String stauts){
        BookFactory.getBookOp(stauts);
    }

以后更改也同样方便。 

策略模式

定义context: 

public class BookContext {

    private BookOperation bookOperation;

    public  BookContext(BookOperation operation){
        this.bookOperation = operation;
    }
    // 执行方法
    public void dos(){
        this.bookOperation.op();
    }
}

直接使用 

 //策略模式
    private void testContext(){
        PrepareOp op = new PrepareOp();
        BookContext context = new BookContext(op);
        context.dos();
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值