Java Factory Pattern(工廠模式)

工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。
在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,并且是通過使用一個共同的接口來指向新創建的對象。

優點: 1、一個調用者想創建一個對象,只要知道其名稱就可以了。 2、擴展性高,如果想增加一個產品,只要擴展一個工廠類就可以。 3、屏蔽產品的具體實現,調用者只關心產品的接口。
缺點:每次增加一個產品時,都需要增加一個具體類和對象實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的復雜度,同時也增加了系統具體類的依賴。這并不是什么好事。

實現步驟:

  1. 創建一個接口
/**
 * 1. 創建一個接口
 * @author mazaiting
 */
public interface Shape {
    /**
     * 畫圖方法
     */
    void draw();
}
  1. 創建實現接口的實現類
/**
 * 2. 創建實現接口的實現類--圓角矩形
 * @author mazaiting
 */
public class Rectangle implements Shape{

    public void draw() {
        System.out.println("圓角矩形");
    }

}

/**
 * 2. 創建實現接口的實現類--矩形
 * @author mazaiting
 */
public class Square implements Shape{

    public void draw() {
        System.out.println("矩形");
    }

}

/**
 * 2. 創建實現接口的實現類--圓形
 * @author mazaiting
 */
public class Circle implements Shape{

    public void draw() {
        System.out.println("圓形");
    }

}
  1. 創建一個工廠,生成基于給定信息的實體類對象
/**
 * 3. 創建一個工廠,生成基于給定信息的實體類對象
 * @author mazaiting
 */
public class ShapFactory {
    /**圓角矩形類名稱(包名+類名)--com.mazaiting.shape.Rectangle*/
    public static final String RECTANGLE = Rectangle.class.getName();
    /**矩形類名稱(包名+類名)--com.mazaiting.shape.Square*/
    public static final String SQUARE = Square.class.getName();
    /**圓形類名稱(包名+類名)--com.mazaiting.shape.Circle*/
    public static final String CIRCLE = Circle.class.getName();
    
    /**
     * 單例。如有不懂,請移步 單例模式(http://www.lxweimin.com/p/fb952d0140ec)
     */
    private static ShapFactory sShapeFactory; 
    private ShapFactory(){}
    public static ShapFactory getInstace() {
        if (null == sShapeFactory) {
            synchronized (ShapFactory.class) {
                if (null == sShapeFactory) {
                    sShapeFactory = new ShapFactory();
                }
            }
        }
        return sShapeFactory;
    }
    
    /**
     * 獲取形狀類型對象
     * 使用反射創建具體類的實例。如有不懂,請移步 反射機制詳解(http://www.lxweimin.com/p/990910bd600e)
     * @param type 類型
     * @return 返回形狀類型對象
     */
    public Shape getShape(String type) {
        try {
            Class<?> clazz = Class.forName(type);
            return (Shape) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
}
  1. 主函數使用
public class Client {
    public static void main(String[] args) {
        // 獲取工廠類的實例
        ShapFactory shapFactory = ShapFactory.getInstace();
        // 獲得具體的圖形
        Shape circle = shapFactory.getShape(ShapFactory.CIRCLE);
        // 畫圖
        circle.draw();
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,982評論 1 15
  • 1 場景問題# 1.1 選擇組裝電腦的配件## 舉個生活中常見的例子——組裝電腦,我們在組裝電腦的時候,通常需要選...
    七寸知架構閱讀 4,419評論 6 67
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 一、工廠模式介紹 工廠模式專門負責將大量有共同接口的類實例化。工廠模式可以動態決定將哪一個類實例化,不必事先知道每...
    端木軒閱讀 12,759評論 1 20
  • 秋風起,我在風中聽到秋聲 這是一個落寞的季節,剛好 你有一份落寞的心情。 陪你一路酒醉,一路高歌 在每一個有月光的...
    一個名叫Alan的男子閱讀 163評論 0 4