鍍金池/ 教程/ Java/ Java工廠設(shè)計模式
Java前端控制器模式
Java工廠設(shè)計模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計模式
Java空對象模式
Java數(shù)據(jù)訪問對象模式
Java訪問者模式
Java組合實體模式
Java服務(wù)定位器模式

Java工廠設(shè)計模式

工廠模式是Java中最常用的設(shè)計模式之一。 這種類型的設(shè)計模式屬于創(chuàng)建模式,因為此模式提供了創(chuàng)建對象的最佳方法之一。

在工廠模式中,我們沒有創(chuàng)建邏輯暴露給客戶端創(chuàng)建對象,并使用一個通用的接口引用新創(chuàng)建的對象。

實現(xiàn)方法

我們將創(chuàng)建一個Shape接口和實現(xiàn)Shape接口的具體類。 一個工廠類ShapeFactory會在下一步中定義。

FactoryPatternDemo這是一個演示類,將使用ShapeFactory來獲取一個Shape對象。 它會將信息(CIRCLE/RECTANGLE/SQUARE)傳遞給ShapeFactory以獲取所需的對象類型。

實現(xiàn)工廠模式的結(jié)構(gòu)如下圖所示 -

第1步

創(chuàng)建一個接口-

Shape.java

public interface Shape {
   void draw();
}

第2步

創(chuàng)建實現(xiàn)相同接口的具體類。如下所示幾個類 -
Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

第3步

創(chuàng)建工廠根據(jù)給定的信息生成具體類的對象。

ShapeFactory.java

public class ShapeFactory {

   //use getShape method to get object of type shape 
   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;
   }
}

第4步

使用工廠通過傳遞類型等信息來獲取具體類的對象。

FactoryPatternDemo.java

public class FactoryPatternDemo {

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

      //get an object of Circle and call its draw method.
      Shape shape1 = shapeFactory.getShape("CIRCLE");

      //call draw method of Circle
      shape1.draw();

      //get an object of Rectangle and call its draw method.
      Shape shape2 = shapeFactory.getShape("RECTANGLE");

      //call draw method of Rectangle
      shape2.draw();

      //get an object of Square and call its draw method.
      Shape shape3 = shapeFactory.getShape("SQUARE");

      //call draw method of circle
      shape3.draw();
   }
}

第5步

驗證輸出結(jié)果如下-

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.