什么是抽象工厂模式:-

它提供了一种方式,使顶级工厂封装一组单独的工厂,这些工厂可以进一步创建相关产品系列
而不指定其具体类。

根据Examples of GoF Design Patterns in Java's core libraries,以下内容被引用为Abstract模式的示例

javax.xml.parsers.DocumentBuilderFactory#newInstance()
但是我不确定在这里遵循抽象工厂模式的情况如何。
DocumentBuilderFactory是否在内部被视为顶级工厂
包含单个工厂,即DocumentBuilderFactory#newInstance(),它能够创建相关产品系列,而无需指定其具体类(因为它只返回DocumentBuilderFactory而不是任何特定实现)。这样对吗?

最佳答案

参考

什么是工厂模式?

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

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

抽象工厂模式示例

const

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

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

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

ComplexShapeFactory
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)返回基于DocumentBuilderFactoryfactoryClassName的新实例(在我的情况下,我使用abFac.getShapeFactory(1);abFac.getShapeFactory(2);)。

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

10-10 16:48