这是众所周知的设计模式吗?它的名字是什么?

我经常在代码中看到这一点,但是当我谈到它时,我不知道这种“模式”的名称。

我有一个具有2个参数的方法,该方法调用具有3个参数的重载方法,并有意将第3个参数设置为空字符串。

public void DoWork(string name, string phoneNumber)
{
    DoWork(name, phoneNumber, string.Empty)
}

private void DoWork(string name, string phoneNumber, string emailAddress)
{
    //do the work
}

我这样做的原因是不要重复代码,并允许现有调用方仍然调用只有2个参数的方法。

这是一种模式吗,它有名字吗?


答案 1

它实际上不仅仅是方法重载(通常相同的方法名称具有不同的参数类型),这种特定的模式 - 其中重载基本上是相同的方法,并且较短的重载调用具有默认值的较长方法以模拟可选参数 - 称为伸缩/伸缩模式,通常在构造函数上看到,但当然可以推广到任何方法。


有关更权威的引用,以下是 Effective Java 2nd Edition 第 2 项的摘录:在面对许多构造函数参数时考虑生成器模式在线摘录))

传统上,程序员使用伸缩构造函数模式,其中您提供仅包含必需参数的构造函数,另一个具有单个可选参数的构造函数,第三个具有两个可选参数,依此类推...

同样,通常伸缩模式是在构造函数的上下文中讨论的(例如,2-arg构造函数将有一行来调用3-arg构造函数等),但我不明白为什么它不能推广到其他方法。this(arg1, arg2, ARG3_DEFAULT);


另一个权威的引用,不幸的是没有定义模式:Sun Developer Network:如何为Javadoc工具编写文档注释

请注意,方法和构造函数是按“伸缩”顺序排列的,这意味着首先是“no arg”形式,然后是“1 arg”形式,然后是“2 arg”形式,依此类推。


另一个随机引用,对模式有更明确的定义:我讨厌方法重载(你也可以!):

伸缩方式

您可能有一个接受一定数量参数的函数。最后几个参数可能不是那么重要,大多数用户会因为必须弄清楚要传递给它们的内容而感到恼火。因此,您创建了更多具有相同名称和更少参数的方法,这些方法调用“master”方法。

最后一句话直接提出,对默认参数的语言支持是一个更好的选择。


答案 2

它的名字是重载,它不是一个设计模式,而是一个OOP功能。

http://en.wikipedia.org/wiki/Method_overloading