📜  设计模式 |设置 2(工厂方法)(1)

📅  最后修改于: 2023-12-03 15:12:08.614000             🧑  作者: Mango

设计模式 | 工厂方法

在软件开发中,工厂方法是一种创建型设计模式,用来创建对象的实例化过程。

意图

定义了一个创建对象的接口,让子类自己决定实例化什么类。工厂方法模式使得一个类的实例化延迟到其子类。

适用性

使用工厂方法模式的情况:

  • 当类不知道它所必须创建的对象的类的时候。
  • 当类希望由子类来指定所创建的对象的时候。
  • 当类的对象需要从多种子类中选择其中一种的时候。
示例

以下是一个简单的工厂方法示例:

// 定义接口
interface Shape {
    void draw();
}

// 实现不同形状的对象
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Rectangle::draw()");
    }
}

class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Square::draw()");
    }
}

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

// 定义工厂
class ShapeFactory {
    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 FactoryMethodPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();

        // 创建Circle对象
        Shape shape1 = shapeFactory.getShape("CIRCLE");
        shape1.draw();

        // 创建Rectangle对象
        Shape shape2 = shapeFactory.getShape("RECTANGLE");
        shape2.draw();

        // 创建Square对象
        Shape shape3 = shapeFactory.getShape("SQUARE");
        shape3.draw();
    }
}
优缺点
优点
  • 降低了代码耦合度。工厂方法模式通过让子类来决定生成对象的类型,使得代码结构更清晰,更易于维护。
  • 扩展性好。在增加新的对象类型时,只需要增加一个新的具体类和一个工厂方法,不需要修改原来的代码。
缺点
  • 类的个数会增加。每个具体产品都需要一个具体工厂类,如果产品种类很多,那么工厂类也会很多,导致类的个数增加。
  • 增加了系统的抽象性和理解难度。
  • 工厂方法模式需要定义一个新的工厂类,增加了额外的开发量。
结论

工厂方法模式是一种常用的设计模式,它对对象的创建过程进行了抽象化,降低了代码的耦合度,提高了系统的可扩展性和可维护性。在实际开发中,可以根据自己的需要选择使用工厂方法模式。