Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Public方法调用同名的私有方法-这种模式是什么?_Java_Design Patterns_Language Agnostic_Nomenclature - Fatal编程技术网

Java Public方法调用同名的私有方法-这种模式是什么?

Java Public方法调用同名的私有方法-这种模式是什么?,java,design-patterns,language-agnostic,nomenclature,Java,Design Patterns,Language Agnostic,Nomenclature,考虑来自Apache Commons的以下代码: 这是一种非常常见的方法-public方法将调用委托给具有相同名称但具有附加参数的private方法。这个图案有名字吗 它更可能是一个。为子系统中的一组接口提供统一接口更为人所知。但在这种情况下,我认为是用来定义更高级别的实现,使子系统更易于使用。正如您所看到的,SplitByCharacterType(final String str,final boolean camelCase)中有两个参数,但只有一个参数通过SplitByCharacter

考虑来自Apache Commons的以下代码:

这是一种非常常见的方法-public方法将调用委托给具有相同名称但具有附加参数的private方法。这个图案有名字吗

它更可能是一个。为子系统中的一组接口提供统一接口更为人所知。但在这种情况下,我认为是用来定义更高级别的实现,使子系统更易于使用。正如您所看到的,
SplitByCharacterType(final String str,final boolean camelCase)
中有两个参数,但只有一个参数通过
SplitByCharacterType(final String str)
向外部世界公开


隐藏实现细节也是一个概念。因此,向其他用户提供了他们需要知道/使用的东西,而实际的处理由负责人负责。

这是可选参数的实现。它用于提供一个API,如果您在没有可选参数的情况下调用它,它将继续使用正常(最好)默认值:

String.splitByCharacterType(text);            // splits the normal way
String.splitByCharacterType(text,CAMEL_CASE); // splits the alternative way
注意:我从未使用过ApacheStringUtils,因此我上面的示例可能是错误的,但这只是为了说明用例

在某些语言如C++中,语言直接提供语法来支持这种用例:

char*[] splitByCharacterType(char* text, bool camelCase = 0) {
    // ...
}
在既没有函数重载也没有可选参数的其他语言中,可以使用varargs实现相同的用例。例如,在javascript中,您可以执行以下操作:

function splitByCharacterType (text) {
    var camelCase = false;
    if (arguments.length > 1 && arguments[1] == true) camelCase = true;

    // ...
}
在某些语言中,您可以使用少于预期数量的参数调用函数,而未指定的参数只会被赋予null或undefined值。例如,在javascript中,您还可以执行以下操作:

function splitByCharacterType (text, camelCase) {
    if (camelCase != undefined) {
        // ..
    }
    else {
        // ..
    }
}
可选参数的思想本质上类似于控制台应用程序的命令行参数。例如:

ls
上述调用生成您最常用的输出,但您也可以执行以下操作:

ls -l

当你需要更多信息时。

我会说它是干的(不要重复你自己)和SRP(单一责任模式)。@Jehof SRP不是代表单一责任原则吗?是的,当然,你是对的,你不能使用
splitByCharacterType()
,正如你所示,因为这个方法的第二个实现是
private
.Ah。我没有注意到那个细节。也许是允许派生类访问底层方法,以便调用替代行为?我不这么认为。不能从派生类访问私有方法。
ls -l