"GetOrCreate" - 这个成语是否具有既定名称?

Joh*_*ell 18 c# c++ design-patterns idioms

好吧,考虑一下我们大多数人多次使用过的常见习语(我假设):

class FooBarDictionary
{
    private Dictionary<String, FooBar> fooBars;

    ...

    FooBar GetOrCreate(String key)
    {
        FooBar fooBar;

        if (!fooBars.TryGetValue(key, out fooBar))
        {
            fooBar = new FooBar();
            fooBars.Add(key, fooBar);
        }

        return fooBar;
    }
}
Run Code Online (Sandbox Code Playgroud)

它有任何确定的名称吗?

(是的,它是用C#编写的,但它可以"轻松"转移到C++.因此该标签.)

ale*_*gle 9

我总是称这样的功能obtainSomething().


Pet*_*ham 9

这有点取决于你为什么这样做 - 这个成语是我见过的被称为memoization,缓存,按需初始化,第一次使用时创建的成语.通常我调用方法"ensureFoo"而不是"GetOrCreate"


jag*_*eep 5

延迟加载

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

  • 我不确定这是否是完全懒惰的.也许聪明的懒加载. (4认同)