设计模式(一)工厂模式

提供一种创建对象的最佳方式(创建对象时不会对客户端暴露创建逻辑,并且是使用一个共同的接口执行创建的对象);确点是每增加一个产品都要增加一个具体类和对象实现工厂


创建一个对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行

让其子类实现工厂接口,返回的也是一个抽象的产品;  只用知道去调用那个接口就行,不用知道其是怎么实现的



设计模式(一)工厂模式

:首先创建一个接口,也就是上图得Shape接口

public interface Shape {
   void draw();
}

:创建实现接口的实体类,也就是上图的Circle、Square、Rectangle三个实体类

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}
       三个实体类都是实现接口的方法,但是具体实现不同,就类似与吃饭工具不相同而已

三:创建一个工厂,生成基于给定信息的实体类的对象,根据给定的信息来调用对应的实体类,也就是上图的ShapeFactory.java

public class ShapeFactory {
    
   //使用 getShape 方法获取形状类型的对象
   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;
   }
}

四:对应找到对应的实体类的实现接口来进行调用实现功能,上图的FactoryPatternDemo.java

public class FactoryPatternDemo {

   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();

      //获取 Circle 的对象,并调用它的 draw 方法
      Shape shape1 = shapeFactory.getShape("CIRCLE");

      //调用 Circle 的 draw 方法
      shape1.draw();

      //获取 Rectangle 的对象,并调用它的 draw 方法
      Shape shape2 = shapeFactory.getShape("RECTANGLE");

      //调用 Rectangle 的 draw 方法
      shape2.draw();

      //获取 Square 的对象,并调用它的 draw 方法
      Shape shape3 = shapeFactory.getShape("SQUARE");

      //调用 Square 的 draw 方法
      shape3.draw();
   }
}