相同的计算流程,但功能不同

时间:2017-06-23 06:27:46

标签: java oop design-patterns

最近我为我的项目需要编写了一小段代码,代码工作得很好......

下面的代码是一个通用版本....

if (someConditionX)
    {
        if (Utils.nullOrEmpty(string1))
        {
            Config config = getConfig();

            if (config != null)
            {
                doA();
            }
        }
        else
        {
            doB();
        }

        if (Utils.nullOrEmpty(string2))
        {
            Config config = getConfig();

            if (config != null)
            {
                doC();
            }
        }
        else
        {
            doD();
        }
    }
    else if (someConditionY)
    {
        if (Utils.nullOrEmpty(string1))
        {
            Config config = getConfig();

            if (config != null)
            {
                doE();
            }
        }
        else
        {
            doF();
        }

        if (Utils.nullOrEmpty(string2))
        {
            Config config = getConfig();

            if (config != null)
            {
                doG();
            }
        }
        else
        {
            doH();
        }
    }

我不相信它的编写方式,我觉得有一个改进的余地可以让它变得更好........

请给我一些建议让它变得更好......是否有使用lambdas的范围?? .........

1 个答案:

答案 0 :(得分:1)

您可以创建一个界面:

interface Do {
    void doSometing();
}

实施它:

class DoA implements Do {
    void doSometing() {/* do A  */} 
}

class DoB implements Do {
    void doSometing() {/* do B  */} 
}

DoC ....... DoD ......等等)

并使用它:

if (someConditionX)   {
     process(string1, new DoA(), new DoB());
     process(string2, new DoC(), new DoD());
 }

其中流程由:

定义
void process(String string, Do doA, Do doB) {

    if(nullOrEmpty(string)){
        if (getConfig() != null) {doA.doSometing(); }   
    }else {
        doB.doSometing();
    }
}

至于使用Lambda表达式,您可以使用Lambda实现该接口:
process (string1, ()->{/* implement doSomething */;}, new DoB());