设计模式之抽象工厂模式

142 阅读1分钟

意图

围绕一个超级工厂创建其他工厂,这些工厂再根据工厂模式提供对象。

示例

创建一个颜色的接口

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();
    }
}