返回

懒羊羊学设计模式——创建者模式

后端

创建者模式的优点

  • 提高代码的可读性和可维护性 :将对象的创建过程分解成多个独立的步骤,使得代码更加清晰和易于维护。
  • 提高代码的可重用性 :创建者模式可以很容易地创建不同类型和不同内部状态的对象,而无需修改代码,从而提高代码的可重用性。
  • 提高代码的可扩展性 :创建者模式可以很容易地添加新的对象类型,而无需修改代码,从而提高代码的可扩展性。

创建者模式的应用场景

  • 创建复杂的对象 :创建者模式非常适合于创建复杂的对象,因为可以将对象的创建过程分解成多个独立的步骤,从而使代码更加清晰和易于维护。
  • 创建不同类型和不同内部状态的对象 :创建者模式可以很容易地创建不同类型和不同内部状态的对象,而无需修改代码,从而提高代码的可重用性和可扩展性。
  • 创建对象池 :创建者模式可以很容易地创建对象池,从而提高应用程序的性能。

创建者模式的实现

创建者模式可以通过多种方式实现,最常见的方式是使用工厂方法模式和抽象工厂模式。

  • 工厂方法模式 :工厂方法模式是一种创建者模式,它定义了一个创建对象的接口,但由子类决定要实例化哪个类。这使得可以很容易地创建不同类型和不同内部状态的对象,而无需修改代码。
  • 抽象工厂模式 :抽象工厂模式是一种创建者模式,它定义了一个创建一组相关对象的接口,但由子类决定要实例化哪个类。这使得可以很容易地创建不同类型和不同内部状态的对象,而无需修改代码。

创建者模式的示例

以下是一个使用工厂方法模式实现创建者模式的示例:

public interface ShapeFactory {
    Shape createShape(String shapeType);
}

public class CircleFactory implements ShapeFactory {
    @Override
    public Shape createShape(String shapeType) {
        if (shapeType.equals("CIRCLE")) {
            return new Circle();
        } else {
            throw new IllegalArgumentException("Invalid shape type: " + shapeType);
        }
    }
}

public class SquareFactory implements ShapeFactory {
    @Override
    public Shape createShape(String shapeType) {
        if (shapeType.equals("SQUARE")) {
            return new Square();
        } else {
            throw new IllegalArgumentException("Invalid shape type: " + shapeType);
        }
    }
}

public class RectangleFactory implements ShapeFactory {
    @Override
    public Shape createShape(String shapeType) {
        if (shapeType.equals("RECTANGLE")) {
            return new Rectangle();
        } else {
            throw new IllegalArgumentException("Invalid shape type: " + shapeType);
        }
    }
}

public class ShapeFactoryDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new CircleFactory();
        Shape shape = shapeFactory.createShape("CIRCLE");
        shape.draw();

        shapeFactory = new SquareFactory();
        shape = shapeFactory.createShape("SQUARE");
        shape.draw();

        shapeFactory = new RectangleFactory();
        shape = shapeFactory.createShape("RECTANGLE");
        shape.draw();
    }
}

在该示例中,ShapeFactory接口定义了一个创建对象的接口,CircleFactorySquareFactoryRectangleFactory类分别实现了该接口,并提供了创建不同类型对象的具体实现。ShapeFactoryDemo类演示了如何使用创建者模式来创建不同类型和不同内部状态的对象。