设计模式中的抽象工厂方法

时间:2015-03-13 16:23:30

标签: design-patterns interface abstract-factory

我将在tutorialpoints网站http://www.tutorialspoint.com/design_pattern/abstract_factory_pattern.htm中浏览AbstractFactory设计模式。

我理解了基本概念。我有两个疑问。

  1. 我没有在那里使用AbstractFactory课程。当工厂为AbstractFactory类型时,我们获得了什么好处。

  2. 而且为什么要在那里上课呢?我们可以去Interface吧?

2 个答案:

答案 0 :(得分:0)

我发现这个例子有点令人困惑,因为你使用抽象工厂来创建两个不同的项目(而且我不是回归null值的忠实粉丝),这就是说:

有时您需要定义除生成您所追求的类型的方法之外的其他行为。

让我们采用该网站中使用的类似示例:

public abstract class AbstractShapeFactory{
   abstract Shape getShape(String shape) ;

   protected bool isShapeNameValid(String shapeName) {
       ...//Maybe you need to do some complex validation here.
          //For instance, `green` would not be a valid shape type.
   }
}

然后你像这样扩展它:

public class 2DShapeFactory extends AbstractShapeFactory {
     public Shape getShape(String shape) {
          super.isShapeNameValid();
          ... //Maybe some additional checks to see if the user really asked for a 2D shape.
          ....
     }
}

这将允许您保证给定的类实现一系列方法(如接口),但也可以节省您的时间,因为某些方法已经实现。

答案 1 :(得分:0)

  

我没有在那里使用AbstractFactory类。当工厂属于AbstractFactory类型时,我们获得了什么优势。

如果您的系统必须创建多个系列的产品,或者您希望在不暴露实施细节的情况下提供产品库,则可以使用此模式。

此模式的一个关键特征:It will decouple the concrete classes from the client.

有关详细信息,请参阅以下SE问题:

What is the basic difference between the Factory and Abstract Factory Patterns?

正在使用的抽象工厂的示例可以是UI工具包(跨Windows, Mac and Linux)。

但是,这些小部件的实现因平台而异。由于Abstract Factory实现,您可以编写独立于平台的客户端。

  

而且为什么要在那里上课呢?我们可以去接口吗?

接口无法实现Abstract Factory模式的意图。通过接口,客户需要知道合同。客户可以看到合同中的任何更改,这些更改可能会破坏客户端功能。但是抽象工厂将客户端与实现接口(工厂方法)

的具体类分离

以下文章有助于更好地理解

dzone文章

oodesign文章

sourcemaking文章