gpt4 book ai didi

java - DocumentBuilderFactory#newInstance() 如何成为抽象工厂模式的一个例子?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:47:54 27 4
gpt4 key购买 nike

什么是抽象工厂模式:-

它提供了一种顶级工厂封装一组单独工厂的方式,这些工厂进一步能够创建相关产品系列没有指定他们的具体类。

根据 Examples of GoF Design Patterns in Java's core libraries下面被引用为抽象模式的例子

javax.xml.parsers.DocumentBuilderFactory#newInstance()

但我不确定它为什么会在这里遵循抽象工厂模式。

DocumentBuilderFactory 是否被认为是内部的顶级工厂包含单个工厂,即 DocumentBuilderFactory#newInstance(),它能够在不指定具体类的情况下创建相关产品系列(因为它只返回 DocumentBuilderFactory 而不是任何特定的实现) .这是正确的吗?

最佳答案

引用

什么是工厂模式?

工厂方法模式(又名工厂模式)是一种创建型模式。创建模式通过隐藏对象的创建方式来抽象对象实例化过程,并使系统独立于对象创建过程。

抽象工厂模式是比工厂方法模式高一级的抽象,这意味着它返回工厂类。

enter image description here

抽象工厂模式示例

常量

public interface Const {
public static final int SHAPE_CIRCLE =1;
public static final int SHAPE_SQUARE =2;
public static final int SHAPE_HEXAGON =3;
}

形状工厂

public abstract class ShapeFactory {
public abstract Shape getShape(int shapeId);
}

除了 SimpleShapeFactory 我们还创建了一个新的:

复杂形状工厂

public class ComplexShapeFactory extends ShapeFactory {
public Shape getShape(int shapeTypeId){
Shape shape = null;
if(shapeTypeId == Const.SHAPE_HEXAGON) {
shape = new Hexagon();//complex shape
}
else{
// drop an error
};
return shape;
}
}

现在让我们在抽象工厂创建,它返回 ShapeFactory 的一种类型:

ShapeFactoryType

public class ShapeFactoryType {
public static final int TYPE_SIMPLE = 1;
public static final int TYPE_COMPLEX = 2;

public ShapeFactory getShapeFactory(int type) {
ShapeFactory sf = null;
if(type == TYPE_SIMPLE) {
sf = new SimpleShapeFactory();
}
else if (type == TYPE_COMPLEX) {
sf = new ComplexShapeFactory();
}
else throw new BadShapeFactoryException("No factory!!");
return sf;
}
}

现在主要调用:

      ShapeFactoryType abFac = new ShapeFactoryType();

ShapeFactory factory = null;
Shape s = null;
//returns a ShapeFactory but whether it is a
//SimpleShapeFactory or a ComplexShapeFactory is not known to the caller.
factory = abFac.getShapeFactory(1);//returns SimpleShapeFactory
//returns a Shape but whether it is a Circle or a Pentagon is
//not known to the caller.
s = factory.getShape(2); //returns square.
s.draw(); //draws a square
//returns a ShapeFactory but whether it is a
//SimpleShapeFactory or a ComplexShapeFactory is not
//known to the caller.
factory = abFac.getShapeFactory(2);
//returns a Shape but whether it is a Circle or a Pentagon is
//not known to the caller.
s = factory.getShape(3); //returns a pentagon.
s.draw(); //draws a pentagon

来自 DocumentBuilderFactory

DocumentBuilderFactory 类似于示例中的 ShapeFactoryType

newInstance(String factoryClassName,ClassLoader classLoader) 返回基于 factoryClassNameDocumentBuilderFactory 的新实例(在我的例子中我使用了 abFac.getShapeFactory(1);abFac.getShapeFactory(2);)。

关于java - DocumentBuilderFactory#newInstance() 如何成为抽象工厂模式的一个例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19593661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com