优化ifelse语句

背景说明

假设在开发一个大型平台时,如果在编码初期就频繁使用 ifelse 语句来决定不同业务模块的处理逻辑,随着业务的不断拓展和变更,代码的修改和维护将会变得异常艰难,可扩展性受到极大限制。
因此,如果能对ifelse 进行优化,那么将提高模块的可扩展性。在面向对象语言里,存在一个强大的控制流操作符:对象。我们能够运用多个已实现的接口,如此一来,便能够依据实例化的类来明确所要运行的代码。
下面是一个示例,此示例会根据用户类型,来切换用户的皮肤。

重构前

public enum UserType {
    DIAMOND("DIAMOND","钻石级别用户"),
    GOLD("GOLD","黄金级别用户"),
    COMMON("COMMON","普通用户"),
    ;

    private String code;
    private String description;

    UserType(String code, String description){
        this.code = code;
        this.description = description;
    }

}


    public void updateSkin(UserType userType){
        if(userType== UserType.GOLD){
            updateGoldSkin();
        }else if(userType== UserType.DIAMOND){
            updateCommonSkin();
        }else{
            updateDiamondSkin();
        }
    }

    private void updateDiamondSkin(){
        //change diamond user skin
    }

    private void updateGoldSkin(){
         //change vip skin
    }

    private void updateCommonSkin(){
         //change common user skin
    }

重构后

可以使用接口的方式,将枚举值和ifelse语句进行优化。

public interface UserSkin {
    /**
     * 更换用户的皮肤
     */
    void updateSkin();
}
public class Gold implements UserSkin{

    @Override
    public void updateSkin(){
        //change gold skin
    }

}
public class Diamond implements UserSkin{

    @Override
    public void updateSkin(){
        //change diamond skin
    }

}
public class Common implements UserSkin{

    @Override
    public void updateSkin(){
        //change common user skin
    }

}
    public void updateSkin() {
        UserType user1 = new Common();
        UserType user2 = new Gold();
        UserType user3 = new Diamond();
        user1.updateSkin();
        user2.updateSkin();
        user3.updateSkin();
    }

这种方式极大的提高代码可扩展性。以后可以很方便的添加新的用户类型,但不影响其他的代码。符合高内聚、低耦合原则。

拓展

switch 语句的分支若未设置 break ,将会产生贯穿性问题。而且,当存在 default 分支来处理其他情况时,可能会致使部分本应特殊处理的情形,也走入了默认分支。不过,switch 语句是能够转换为 ifelse 结构的。基于此,建议按照上述方式对 switch 进行重构。
那么,让重构成为我们的日常!

参考

《重构的时机和方法–Christian Clausen著、郭涛译》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值