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