意图
围绕一个超级工厂创建其他工厂,这些工厂再根据工厂模式提供对象。
示例
创建一个颜色的接口
public interface Color {
void fill();
}
创建相应的颜色实体类
public class Blue implements Color {
@Override
public void fill() {
System.out.println("This is Blue");
}
}
public class Green implements Color {
@Override
public void fill() {
System.out.println("This is Green");
}
}
public class Yellow implements Color {
@Override
public void fill() {
System.out.println("This is yellow");
}
}
创建一个形状的接口
public interface Shape {
void Draw();
}
创建相应的实体类
public class Circle implements Shape {
@Override
public void Draw() {
System.out.println("This a circle");
}
}
public class Rentangle implements Shape {
@Override
public void Draw() {
System.out.println("This is a rentangle");
}
}
public class Triangle implements Shape {
@Override
public void Draw() {
System.out.println("This is a triangle");
}
}
创建获取颜色和形状工厂的抽象工厂类
public abstract class AbstractFactory {
public abstract Shape getShape(String shape);
public abstract Color getColor(String color);
}
创建一个工厂的创建者,用于创建工厂
public class FactoryProducer {
public static AbstractFactory getFactory(String choice) {
if (choice.equals("Shape")) {
return new ShapeFactory();
} else if (choice.equals("Color")) {
return new ColorFactory();
}
return null;
}
}
创建颜色工厂和形状工厂
public class ColorFactory extends AbstractFactory {
@Override
public Shape getShape(String shape) {
return null;
}
@Override
public Color getColor(String color) {
if (color.equals("Green")) {
return new Green();
} else if (color.equals("Blue")) {
return new Blue();
} else if (color.equals("Yellow")) {
return new Yellow();
}
return null;
}
}
public class ShapeFactory extends AbstractFactory {
@Override
public Shape getShape(String shape) {
switch (shape) {
case "Circle" :
return new Circle();
case "Rentangle":
return new Rentangle();
case "Triangle":
return new Triangle();
}
return null;
}
@Override
public Color getColor(String color) {
return null;
}
}
通过工厂创建者FactoryProducer创建工厂,再通过工厂由不同参数创建对象。
public class AbstractFactoryPatternDemo {
public static void main(String[] args) {
ColorFactory colorFactory = (ColorFactory) FactoryProducer.getFactory("Color");
ShapeFactory shapeFactory = (ShapeFactory) FactoryProducer.getFactory("Shape");
Shape circle = shapeFactory.getShape("Circle");
Shape rentangle = shapeFactory.getShape("Rentangle");
Shape triangle = shapeFactory.getShape("Triangle");
Color green = colorFactory.getColor("Green");
Color blue = colorFactory.getColor("Blue");
Color yellow = colorFactory.getColor("Yellow");
circle.Draw();
rentangle.Draw();
triangle.Draw();
green.fill();
blue.fill();
yellow.fill();
}
}