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