优化多个else if的情形

今天面试清晰记得一道题目
由于题目为伪代码,描述的不清不楚,让人很难理解,在此我把问题详细化。
举个例子,如包子铺,他会有不同馅的包子卖。

public  Baozi chushou(String type) {
        Baozi baozi;

        if(type.equals("猪肉")){
            persion = new zhurou();
        }else if(type.equals("牛肉")){
            persion = new niurou();
        }else if(type.equals("韭菜")){
//          ...
        }
    }
Baozi好比是一个的抽象类或者接口。

interface Baozi {
void xian();
}
`
如果我要卖不同的包子,每增加一种不同馅的包子,我就要去添加一次esle if 如果我这个猪肉包子卖的不好不想出售了,我就要去掉esle if 中的猪肉包子。如此频繁的修改代码不是我们想要的。那么我们该如何优化呢?

———————分—————割————–线—————–

首先我们要想到哪里的代码变动频繁,就封装哪里的代码。
既然我们不想自己去创建不同馅的包子,那我们何不交给工厂去创建呢?没错,这就是我们经常提到的工厂设计模式。

public class BaoziFactory {
    public static Baozi createBaozi(String type){
        Baozi baozi;

        if(type.equals("猪肉")){
            baozi= new zhurou();
        }else if(type.equals("牛肉")){
            baozi= new niurou();
        }else if(type.equals("韭菜")){
//          ...
        }
        return baozi;
    }
}

这里的代码没什么变动,只是封装了了起来。

这时,我们就需要修改一下我们客户代码的类了

public class ChuShou {

BaoziFactory baoziFactory; // 引入我们的工厂

public static Baozi chushou(String type) {
    Baozi baozi = BaoziFactory.createBaozi(type);
    baozi.xian();

    return baozi;
}

}

这样,第一步的优化完成了。我们在卖包子的时候,不需要自己去不断的创建包子了,只需要交给工厂去统一创建就可以了。
也许有人会问这么做似乎只是把问题搬到了另一个对象中罢了。问题依然没有解决。每添加一个不同馅的包子,依然要修改很多代码。
我想说的是,BaoziFactory 可以有很多客户,目前只有一个chushou这个方法是他的客户,假如又出现个wanggou()方法呢?这样是不是省略了很多代码呢?可能取的名字都不恰当,但是能说明问题,这样做至少可以让原有的逻辑不会发生改变。

```

你可能感兴趣的:(代码优化)