设计模式之工厂方法模式

设计模式之工厂方法模式

  • 引入
  • 案例
  • 案例类图
  • 案例代码
  • 模式详解

引入

当我们需要创建一个对象的时候,通常的做法是直接使用 new 操作符来实例化一个具体的对象。但是,当我们需要创建多个具有相似特征的对象时,我们需要重复编写相似的代码,这会导致代码冗余和可维护性问题。

工厂方法模式解决了这个问题。它将对象的创建过程封装在工厂类中,客户端不需要知道具体对象的创建细节,只需要通过工厂类来获取需要的对象。工厂方法模式可以使代码更加灵活,易于扩展和维护。它将客户端代码和具体对象的实现解耦,使得客户端代码更加简洁和可读。

案例

案例类图

«interface»
Shape
void draw()
Circle
void draw()
Square
void draw()
Rectangle
void draw()
ShapeFactory
Shape getShape(ShapeType shapeType)

案例代码

  1. Shape 接口(此处我们设置一个绘画的方法,用来绘制图形)
    public interface Shape {
        
        void draw();
    }
    
  2. 使用枚举类型设置图形的实现类名称
    public enum ShapeType {
        CIRCLE,
        SQUARE,
        RECTANGLE
    }
    
  3. 设置实现类
    1. Circle
      public class Circle implements Shape {
          @Override
          public void draw() {
              System.out.println("Circle::draw() method.");
          }
      }
      
    2. Square
      public class Square implements Shape {
            @Override
            public void draw() {
                System.out.println("Square::draw() method.");
            }
        }
      
    3. Rectangle
      public class Rectangle implements Shape {
        @Override
        public void draw() {
          System.out.println("Rectangle::draw() method.");
        }
      }
      
  4. 设置工厂方法
    public class ShapeFactory {
        public Shape getShape(ShapeType shapeType) {
            if (shapeType == null) {
                return null;
            }
            switch (shapeType) {
                case CIRCLE:
                    return new Circle();
                case SQUARE:
                    return new Square();
                case RECTANGLE:
                    return new Rectangle();
                default:
                    return null;
            }
        }
    }
    
  5. 测试工厂方法
    public static void main(String[] args) {
          ShapeFactory shapeFactory = new ShapeFactory();
          Shape shape1 = shapeFactory.getShape(ShapeType.CIRCLE);
          shape1.draw();
    
          Shape shape2 = shapeFactory.getShape(ShapeType.SQUARE);
          shape2.draw();
          Shape shape3 = shapeFactory.getShape(ShapeType.RECTANGLE);
          shape3.draw();
    }
    

模式详解

当我们使用到工厂方法模式时,它必须包含以下角色:

1.工厂类(Creator):负责创建产品的工厂方法。在简单工厂模式中,工厂类负责创建所有产品对象,根据不同的参数来创建不同的具体产品对象。
2. 抽象产品类(Product):定义了产品对象的共性,可以是抽象类或者接口。
3. 具体产品类(ConcreteProduct):实现了抽象产品类定义的接口,即具体产品。

«interface»
Product
method1()
Creator
create
factory()
ConcreteProduct
method1()

工厂方法模式的核心在于工厂类。客户端代码不直接调用具体产品的构造函数,而是通过工厂类来创建产品对象。客户端代码只需要知道工厂类的接口和产品的抽象类或接口,就可以创建具体产品的对象了。

你可能感兴趣的:(设计模式,Java,设计模式,工厂方法模式,java)