这与约书亚·布洛赫(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);
上面的代码是什么意思?
newList
是otherList
的副本,还是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/