浅谈设计模式之工厂模式

0 工厂模式的介绍

工厂模式属于创建型模式,是Java中最常见的设计模式之一。工厂模式提供了一种将对象的实例化过程封装在工厂类的方式,通过工厂模式可以屏蔽掉对象的创建过程,对外提供了一种统一的接口来创建不同类型的对象。

优点:

  • 一个调用者想创建一个对象只需要知道其名称即可
  • 可扩展性高,新增一个产品只需要扩展一个工厂类

缺点:

  • 每增加一个产品时都需要增加一个对象实现工厂和实现类,这使得系统中类的数量增加,一定程度上增加了系统类的复杂程度。

1 核心角色

工厂模式中包含了一下几个核心角色:

  • 抽象产品:定义了产品的共同接口或者抽象类。抽象产品可以是所有具体产品的父类或接口,表示所有具体产品共有的方法。
  • 具体产品:实现抽象产品接口,定义具体产品特定的行为。
  • 工厂类:用于声明创建产品的抽象方法,一个工厂内可以声明多个不同产品的抽象方法。
  • 工厂对象:工厂类的实例化对象,负责创建具体产品的对象。

2 实现案例

创建一个 Shape 接口和实现 Shape 接口的实体类。然后定义工厂类 ShapeFactory。
FactoryPatternDemo 类使用 ShapeFactory 来获取 Shape 对象。它向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便获取它所需对象的类型。
浅谈设计模式之工厂模式_第1张图片

2.1 创建接口Shape

public interface Shape {
    void draw();
}

2.2 创建实现接口的实现类

矩形实现类:

public class Rectangle implements Shape{
    @Override
    public void draw() {
        System.out.println("矩形~");
    }
}

圆形实现类:

public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("圆形~");
    }
}

正方形实现类:

public class Square implements Shape{
    @Override
    public void draw() {
        System.out.println("正方形~");
    }
}

2.3 创建工厂类,生成指定产品的实体类对象

public class ShapeFactory {

    //使用getShape方法获取对应的形状类型
    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 {
            return new Square();
        }
    }
}

2.4 创建工厂对象,调用具体产品的对象方法

public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();

        //获取圆形的对象,并调用draw方法
        Shape circle = shapeFactory.getShape("CIRCLE");
        circle.draw();

        //获取矩形的对象,并调用draw方法
        Shape rectangle = shapeFactory.getShape("RECTANGLE");
        rectangle.draw();

        //获取正方形的对象,并调用draw方法
        Shape square = shapeFactory.getShape("SQUARE");
        square.draw();
    }
}

3 输出结果

浅谈设计模式之工厂模式_第2张图片

你可能感兴趣的:(设计模式,设计模式)