工厂模式

应用实例: 1、您需要文具(圆,长方形,正方形),可以直接从文具包里拿,而不用去管这文具是怎么做出来的,以及这个文具的具体材料。

使用场景:当一些类创建时过于复杂,但又被经常调用时。

步骤 1

创建一个接口:

/**
 * 形状
 */
public interface Shape {
   
   void draw();
}

步骤 2

创建实现接口的实体类。

/**
 * 长方形类
 */
public class Rectangle implements Shape {
 
   @Override
   public void draw() {
      System.out.println("长方形");
   }
}

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


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

步骤 3

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

/**
 * 获取形状的工厂
 */
public class ShapeFactory {

   /**
    *
    * 使用 getShape 方法获取形状类型的对象
    * @param shapeType
    * @return 返回的值是他们的父类。(向上造型)
    */
    public Shape getShape(String shapeType) {

        //如果参数是null,返回null
        if (shapeType == null) {
            return null;
        }

        //如果参数是CIRCLE,就返回Circle实例(忽略大小写)
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        }

        //如果参数是RECTANGLE,就返回Rectangle实例(忽略大小写)
        if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        }

        //如果参数是SQUARE,就返回Square实例(忽略大小写)
        if (shapeType.equalsIgnoreCase("SQUARE")) {
            return new Square();
        }

        //都不满足返回null
        return null;
    }
}

测试

public class FactoryPatternDemo {
 
   public static void main(String[] args) {

      //创建工厂
      ShapeFactory shapeFactory = new ShapeFactory();
 
      //获取 Circle 的对象,并调用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");
      shape1.draw();
 
      //获取 Rectangle 的对象,并调用它的 draw 方法
      Shape shape2 = shapeFactory.getShape("RECTANGLE");
      shape2.draw();
 
      //获取 Square 的对象,并调用它的 draw 方法
      Shape shape3 = shapeFactory.getShape("SQUARE");
      shape3.draw();

   }
}



原文地址:https://www.cnblogs.com/bigbigxiao/p/13132110.html