如果我在实现工厂模式时使用抽象类而不是接口.它仍然是工厂模式吗?

Ach*_*zen 8 java design-patterns

例如:http://www.tutorialspoint.com/design_pattern/factory_pattern.htm

如果我在抽象类Shape上更改接口形状,则使具体类扩展Shape并使Shape工厂返回Shape抽象类类型对象.它仍然是工厂模式吗?

Joh*_*ohn 6

我会同意的。

让我们看一下Factory方法模式的定义:

工厂方法模式是一种创建模式,该模式使用工厂方法来处理创建对象的问题,而无需指定将要创建的对象的确切类

这种模式背后的动机是使用对象将创建对象与客户端分开。客户应向工厂提供规范,但工厂将抽象出如何构建对象的详细信息。

如果这是接口或抽象类,则是针对具体情况的实现细节,只要您对工厂的实现可以让您获得模式背后的动力。

如果以下任何一种情况适用于您的情况,请考虑使用抽象类:

  • 您想在几个紧密相关的类之间共享代码。

  • 您期望扩展您的抽象类的类具有许多公共方法或字段,或者需要除public(例如protected和private)之外的访问修饰符。

  • 您要声明非静态或非最终字段。这使您能够定义可以访问和修改它们所属对象的状态的方法。

如果以下任何一种情况适用于您的情况,请考虑使用接口:

  • 您期望不相关的类将实现您的接口。例如,接口Comparable和Cloneable由许多不相关的类实现。

  • 您想指定特定数据类型的行为,但不关心谁实现了它的行为。

  • 您想利用类型的多重继承。

在某些实现中,使用抽象类而不是工厂创建的产品的接口甚至更有意义。如果所有产品之间都有一组共享的功能/行为,那么将这些功能/行为放入基本抽象类中确实很有意义。即使产品是从其他工厂制造的,这也可能适用。

归结为:您是否愿意,在产品之间引入耦合是否有意义?最后,客户将获得相同的结果-根据规格构建产品,并提取构造细节。