有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java API中的生成器模式示例?

Joshua Bloch的高效Java描述了一种构建器模式,可用于构建具有多个可选自定义参数的对象。他为构建器函数建议的命名约定“模拟Ada和Python中的命名可选参数”,似乎不符合Java的标准命名约定。Java函数往往依靠一个动词来启动函数,然后用一个基于名词的短语来描述它的功能。Builder类只有将由该函数定义的变量的名称

Java标准库中是否有使用Builder模式的API?在继续使用之前,我想将书中的建议与核心Java库集中的实际实现进行比较


共 (1) 个答案

  1. # 1 楼答案

    我不确定是否在核心JDK中,但是可以在Guava中找到好的例子^{}可能是我脑海中能想到的最好的例子。例如,从文档中:

    ConcurrentMap<Key, Graph> graphs = new MapMaker()
        .concurrencyLevel(32)
        .softKeys()
        .weakValues()
        .expiration(30, TimeUnit.MINUTES)
        .makeComputingMap(
            new Function<Key, Graph>() {
              public Graph apply(Key key) {
                return createExpensiveGraph(key);
              }
            });
    

    是的,这类东西可能与“标准”Java命名格格不入,但也可能非常可读

    对于不返回“this”而返回新对象(通常具有不可变类型)的情况,我喜欢使用“with”前缀——Joda Time广泛使用该模式。这不是建筑模式,而是另一种相关的建筑形式