Справочник
Что такое фабричный шаблон?
Шаблон метода Factory (шаблон Factory) – это порождающий шаблон. Шаблоны создания абстрагируют процесс создания объектов, скрывая то, как объекты создаются, и делают систему независимой от процесса создания объектов.
Абстрактный шаблон фабрики — это один уровень абстракции выше, чем шаблон метода фабрики, что означает, что он возвращает классы фабрики.
![введите здесь описание изображения](https://i.stack.imgur.com/qhgAX.png)
Пример шаблона абстрактной фабрики
Константа
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)
возвращает новый экземпляр DocumentBuilderFactory
на основе factoryClassName
(в моем случае я использовал abFac.getShapeFactory(1);
и abFac.getShapeFactory(2);
).
person
Maxim Shoustin
schedule
25.10.2013