这与约书亚·布洛赫(Joshua Bloch)的“有效Java”一书中的对象的创建和销毁有关。

项目1:考虑静态工厂方法而不是构造函数

此方法将 boolean 基本值转换为 boolean 对象引用:

public static Boolean valueOf(boolean b) {
    return b ? Boolean.TRUE : Boolean.FALSE;
}



作者似乎在谈论静态工厂方法和工厂方法模式之间的区别。这到底有什么区别?

另外,BalusC 提到in this thread,它是Factory Method下的链接java.util.Calendar#getInstance(),它是一个静态工厂方法,从而暗示该静态工厂方法是Factory Method Pattern的子集。

最佳答案

工厂方法模式

工厂方法是用于创建对象的接口(interface)。此接口(interface)的具体实现指定要创建的具体对象。

当客户端必须实例化对象但不知道如何创建对象时,将使用工厂方法模式。

  +------------+       uses        +-------------+
  |   Client   |    ---------->    |   Factory   |
  +------------+                   +-------------+
        | uses                     | create()    |
        V                          +-------------+
  +------------+                          ^
  | SomeObject |                          |
  +------------+                          |
        ^                                 |
        |                                 |
+--------------------+   create  +------------------+
| SomeConcreteObject | <-------- | ConcreateFactory |
+--------------------+           +------------------+

静态工厂方法

静态工厂方法模式是一种编写干净代码的方法。这是给构造函数一个更有意义的名称来表达其功能的方法。例如。
List<String> newList = new ArrayList<String>(otherList);

上面的代码是什么意思?
newListotherList的副本,还是ArrayList保留了otherList的引用并只是将调用委派给它(如包装器)?

我想每个人都知道上面的代码是做什么的,因为我们阅读了Javadoc。但是,如果使用静态工厂方法,则无需阅读Javadoc,代码将更加清晰。例如。
List<String> copy = ArrayList.copyOf(otherList);
SortedSet<SomeObject> sortedSet = TreeSet.orderedBy(comparator);

使用静态工厂方法,也可以用相同的参数列表编写多个“构造函数”,因为您可以给每个人起另一个名字。使用“常规”构造函数将无法做到这一点。例如。
List<String> copy = ArrayList.copyOf(otherList);
List<String> delegateList = ArrayList.delegateOf(otherList);

关于java - 约书亚·布洛赫(Joshua Bloch)#Item 1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38561736/

10-11 03:55