我将在tutorialpoints网站http://www.tutorialspoint.com/design_pattern/abstract_factory_pattern.htm中浏览AbstractFactory
设计模式。
我理解了基本概念。我有两个疑问。
我没有在那里使用AbstractFactory
课程。当工厂为AbstractFactory
类型时,我们获得了什么好处。
而且为什么要在那里上课呢?我们可以去Interface
吧?
答案 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文章