设计模式-抽象工厂

         抽象工厂属于创建型模式。

         抽象工厂和工厂设计模式的区别:

        工厂模式的是设计模式中最简单的一种设计模式,主要设计思想是,分离对象的创建和使用,在Java中,如果需要使用一个对象时,需要new Class(),获取到对象,然后操作。而将创建对象这一过程集中管理就叫做工厂模式,在工厂模式下,你不需要创建目标对象,而是使用管理对象的工厂,去调用对象。

        抽象工厂负责创建一个相关对象的工厂,抽象工厂创建工厂,工厂再创建对象。

        工厂的上级抽象工厂

public abstract class AbstractFactory {
    public abstract Color getColor(String color);
    public abstract Shape getShape(String shape);
}

        普通工厂类,负责创建具体对象 

public class ShapeFactory extends AbstractFactory {
    @Override
    public Color getColor(String color) {
        return null;
    }

    @Override
    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        }
        return null;
    }
}

        还需要一个类来根据条件创建不同的工厂,不同的工厂实现了抽象类,在这里就可以根据不同条件返回工厂对象,否则返回工厂对象的类需要写两个,因为两个工厂都实现了父类抽象工厂,返回对象可以返回父类

public class FactoryProducer {
    public static AbstractFactory getFactory(String choice){
        if(choice.equalsIgnoreCase("SHAPE")){
            return new ShapeFactory();
        } else if(choice.equalsIgnoreCase("COLOR")){
            return new ColorFactory();
        }
        return null;
    }
}

           在调用时,可以清晰的看到,首先获取工厂对象,再通过工厂对象来实现创建不同的对象

public static void main(String[] args) {

        //获取形状工厂
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

        //获取形状为 Circle 的对象
        Shape shape1 = shapeFactory.getShape("CIRCLE");

        //调用 Circle 的 draw 方法
        shape1.draw();

        //获取形状为 Rectangle 的对象
        Shape shape2 = shapeFactory.getShape("RECTANGLE");

        //调用 Rectangle 的 draw 方法
        shape2.draw();

        //获取形状为 Square 的对象
        Shape shape3 = shapeFactory.getShape("SQUARE");

        //调用 Square 的 draw 方法
        shape3.draw();

        //获取颜色工厂
        AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

        //获取颜色为 Red 的对象
        Color color1 = colorFactory.getColor("RED");

        //调用 Red 的 fill 方法
        color1.fill();

        //获取颜色为 Green 的对象
        Color color2 = colorFactory.getColor("GREEN");

        //调用 Green 的 fill 方法
        color2.fill();

        //获取颜色为 Blue 的对象
        Color color3 = colorFactory.getColor("BLUE");

        //调用 Blue 的 fill 方法
        color3.fill();
    }

 

        git地址:Design_pattern: 设计模式icon-default.png?t=N7T8https://gitee.com/qiminghaonan123/design_pattern.git

相关推荐

  1. 设计模式 抽象工厂

    2024-07-22 06:08:03       44 阅读
  2. 设计模式抽象工厂

    2024-07-22 06:08:03       49 阅读
  3. 设计模式-抽象工厂模式

    2024-07-22 06:08:03       43 阅读
  4. 设计模式-抽象工厂模式

    2024-07-22 06:08:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 06:08:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 06:08:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 06:08:03       45 阅读
  4. Python语言-面向对象

    2024-07-22 06:08:03       55 阅读

热门阅读

  1. python多进程库(multiprocessing)

    2024-07-22 06:08:03       17 阅读
  2. python每日学习9:正则表达式

    2024-07-22 06:08:03       19 阅读
  3. Linux

    Linux

    2024-07-22 06:08:03      17 阅读
  4. 树上启发加点分治思想

    2024-07-22 06:08:03       17 阅读