工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

实现

我们将创建一个 Shape 接口和实现 Shape 接口的实体类。下一步是定义工厂类 ShapeFactory
FactoryPatternDemo 类使用 ShapeFactory 来获取 Shape 对象。它将向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便获取它所需对象的类型。
工厂模式 - 图1

代码

创建一个工厂,生成基于给定信息的实体类的对象。

  1. public class ShapeFactory {
  2. //使用 getShape 方法获取形状类型的对象
  3. public Shape getShape(String shapeType){
  4. if(shapeType == null){
  5. return null;
  6. }
  7. if(shapeType.equalsIgnoreCase("CIRCLE")){
  8. return new Circle();
  9. } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
  10. return new Rectangle();
  11. } else if(shapeType.equalsIgnoreCase("SQUARE")){
  12. return new Square();
  13. }
  14. return null;
  15. }
  16. }

创建一个接口

  1. public interface Shape {
  2. void draw();
  3. }

创建实现类

  1. class Rectangle implements Shape {
  2. @Override
  3. public void draw() {
  4. System.out.println("Inside Rectangle::draw() method.");
  5. }
  6. }
  7. class Square implements Shape {
  8. @Override
  9. public void draw() {
  10. System.out.println("Inside Square::draw() method.");
  11. }
  12. }
  13. class Circle implements Shape {
  14. @Override
  15. public void draw() {
  16. System.out.println("Inside Circle::draw() method.");

使用该工厂,通过传递类型信息来获取实体类的对象。

  1. public class FactoryPatternDemo {
  2. public static void main(String[] args) {
  3. ShapeFactory shapeFactory = new ShapeFactory();
  4. //获取 Circle 的对象,并调用它的 draw 方法
  5. Shape shape1 = shapeFactory.getShape("CIRCLE");
  6. //调用 Circle 的 draw 方法
  7. shape1.draw();
  8. //获取 Rectangle 的对象,并调用它的 draw 方法
  9. Shape shape2 = shapeFactory.getShape("RECTANGLE");
  10. //调用 Rectangle 的 draw 方法
  11. shape2.draw();
  12. //获取 Square 的对象,并调用它的 draw 方法
  13. Shape shape3 = shapeFactory.getShape("SQUARE");
  14. //调用 Square 的 draw 方法
  15. shape3.draw();
  16. }
  17. }