Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.Calendar是如何作为工厂方法设计模式的一个示例的?_Java_Design Patterns_Factory Method - Fatal编程技术网

java.util.Calendar是如何作为工厂方法设计模式的一个示例的?

java.util.Calendar是如何作为工厂方法设计模式的一个示例的?,java,design-patterns,factory-method,Java,Design Patterns,Factory Method,为工厂方法提供了一个很好的示例 在该示例中,有公共产品界面、具体产品、基础创建者和具体创建者。但在Calendar中,我发现只有通用的产品接口(Calendar类)和具体的产品(GregorianCalendar、JapaneseImperialCalendar等,它们扩展了Calendar) 我们调用Calendar.getInstance()并获得Calendar的实例。我的期望是我们打电话给一个具体的创造者,得到一个具体产品的实例 Calendar是如何作为工厂方法的一个示例的?总结一下这

为工厂方法提供了一个很好的示例

在该示例中,有公共产品界面、具体产品、基础创建者和具体创建者。但在Calendar中,我发现只有通用的产品接口(Calendar类)和具体的产品(GregorianCalendar、JapaneseImperialCalendar等,它们扩展了Calendar)

我们调用
Calendar.getInstance()
并获得
Calendar
的实例。我的期望是我们打电话给一个具体的创造者,得到一个具体产品的实例


Calendar
是如何作为工厂方法的一个示例的?

总结一下这些评论,
Calendar.getInstance()
就是这种模式的一个示例。它不是GoF工厂方法模式的一个示例

GoF工厂方法模式始终使用继承。这是其定义的一部分。它与其他GoF工厂模式形成对比


重构大师通常是设计模式方面的优秀资源;但是所有的设计模式教程都会出错,尤其是关于工厂的,因为有太多不同的版本,GoF之外的版本可能比它里面的版本更常见。

Calendar.getInstance()
是一种工厂方法首先,我不会使用
Calendar
作为任何示例。第二,“工厂方法”和“工厂设计模式”之间有区别。@markrottveel感谢您的评论。我知道
Calendar.getInstance()
是一种工厂方法。我对factory方法设计模式的理解是,factory方法位于基本创建者类中,具体的创建者可以重写此方法。他们还将返还混凝土产品。但是这里
Calendar.getInstance()
返回Calendar对象本身。这让我很困惑。
Calendar.getInstance()
将返回大多数地区的
Gregoriacalendar
实例,对于某些地区
BuddhistCalendar
JapaneseImperialCalendar
(或者可能是通过日历提供程序定义的特殊类型)。这就是它成为工厂方法的原因。你不需要调用一个具体类型的构造函数,而是让基类型找出哪种类型是正确的构造类型。它们是两种不同的模式。
Calendar
所做的是一个静态工厂方法,它与工厂方法模式类似,但不完全相同。