1. 程式人生 > >Android 工廠方法模式

Android 工廠方法模式

文章目錄

1、工廠方法模式介紹

工廠方法模式(Factory Pattern ),是建立型設計模式之一。工廠方法模式是一個結構比較簡單的模式。

2、工廠方法模式的定義

就是一個用於建立物件的介面,讓子類來決定實體化那個類。

3、使用場景

在任何需要生成複雜物件的地方,都可以使用工廠模式。

4、模式的簡單實現

我們以生活中一個例子來說明:
一個汽車廠主要的組裝某款SUV車型,有Q3, Q5, Q7, 對於這類車內部結構差異性並不是很大。
因此一條生產線足以應對這3種車型,對於該類生產線工廠提供了一個抽象類定義。

public   abstract   class AudiFactory {

    //某車型的工廠方法
    // clz 具體的suv  型號
    //return 具體的suv 物件

    public abstract  <T extends  AudiCar> T createAudiCar (Class<T> clz);
}

工廠的3中suv 車型可能在主結構上並沒有什麼差異,因此並沒有什麼必要為每一種車型都提供一條不同的生產線即可:

//為相似車型設定 同一條生產線
public  class  AudiCarFactory extends  AudiFactory {

    @Override
    public <T extends AudiCar> T createAudiCar(Class<T> clz) {
        AudiCar car = null;
        try {

            car = (AudiCar) Class.forName(clz.getName()).newInstance();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return (T) car;
    }
}

定義車的基本功能的 類

//相似車型的基本構成 汽車的抽象產品類
public abstract  class AudiCar {

    public AudiCar () {}
    //定義汽車的一個行為方法, 車可以行走
    public abstract  void drive();

    //定義汽車可以自動巡航
    public abstract void selfNavigation();
}

接下來定義每種具體的車型

  //生產具體車型
    public class AudiQ3 extends  AudiCar {

        @Override
        public void drive() {
            System.out.println("Q3 啟動了");
        }

        @Override
        public void selfNavigation() {
            System.out.println("Q3 開始自動巡航了");
        }
    }


    public class AudiQ5 extends  AudiCar {

        @Override
        public void drive() {
            System.out.println("Q5 啟動了");
        }

        @Override
        public void selfNavigation() {
            System.out.println("Q5 開始自動巡航了");
        }
    }

    public class AudiQ7 extends  AudiCar {

        @Override
        public void drive() {
            System.out.println("Q7 啟動了");
        }

        @Override
        public void selfNavigation() {
            System.out.println("Q7 開始自動巡航了");
        }
    }

最後我們將各種類組裝起來形成一條完整的流水線。

public class ClientClass {
    public static void main(String[] args) {
        //構造一個製造汽車工廠的工廠物件
        AudiFactory factory = new AudiCarFactory();

        //生產 Q3 並啟動
        AudiQ3 audiQ3 = factory.createAudiCar(AudiQ3.class);
        audiQ3.drive();
        audiQ3.selfNavigation();

        //生產 Q5 並啟動
        AudiQ5 audiQ5 = factory.createAudiCar(AudiQ5.class);
        audiQ5.drive();
        audiQ5.selfNavigation();

        //生產 Q7 並啟動
        AudiQ7 audiQ7 = factory.createAudiCar(AudiQ7.class);
        audiQ7.drive();
        audiQ7.selfNavigation();

    }

最後輸出結果如下:
Q3 啟動了
Q3 開始自動巡航了
Q5 啟動了
Q5 開始自動巡航了
Q7 啟動了
Q7 開始自動巡航了

(自己在studio上執行,沒有實現 ,出現 bug :
10-12 15:27:29.835 21457-21457/com.example.menglux.factorymode W/System.err: java.lang.InstantiationException: can’t instantiate class com.example.menglux.factorymode.ClientActivity$AudiQ3; no empty constructor

在此只做思路整理
工廠模式,簡單一點,就是將相同型別的類,通過一個介面來實現 物件的例項化,而不是通過 new.

文獻參考:
Android 原始碼設計模式解析與實戰 第二版

本人鄭重宣告,本部落格所編文章、圖片版權歸權利人持有,本博只做學習交流分享所用,不做任何商業用途。訪問者可將本博提供的內容或服務用於個人學習、研究或欣賞,不得用於商業使用。同時,訪問者應遵守著作權法及其他相關法律的規定,不得侵犯相關權利人的合法權利;如果用於商業用途,須徵得相關權利人的書面授權。若文章、圖片的原作者不願意在此展示內容,請及時通知在下,將及時予以刪除。