前言
本文是對《Adroid 源碼設計模式解析與實戰(zhàn)》 何紅輝、關愛民 著 人民郵電出版社所做的讀書筆記。文章是對本書的一些列學習筆記,如若有侵犯到作者權益,還望作者能聯(lián)系我,我會及時下架。
這本書不錯,有興趣的同學可以買原書看看。
感興趣的朋友歡迎加入學習小組QQ群: 193765960。
版權歸作者所有,如有轉(zhuǎn)發(fā),請注明文章出處:https://xiaodanchen.github.io/archives/
相關文章:
Android 設計模式:(一)面向?qū)ο蟮牧笤瓌t
Android 設計模式:(二)單例模式
Android 設計模式:(三)Builder模式
Android 設計模式:(四)原型模式
Android 設計模式:(五)工廠方法模式
Android 設計模式:(六)抽象工廠模式
Android 設計模式:(七)策略模式
1. 工廠方法模式的定義
定義一個用于創(chuàng)建對象的接口,讓子類決定實例化那個類。(將零部件組裝成不同的產(chǎn)品)
2. 工廠方法模式的實現(xiàn)
先說明兩個接口:抽象產(chǎn)品類和抽象工廠類。
抽象產(chǎn)品類:定義了產(chǎn)品族,同一產(chǎn)品組的產(chǎn)品具有相似的功能,因此可以使用同一個產(chǎn)品線。
抽象工廠類:定義了產(chǎn)品線
2.1 廠長小明的幸福人生
屌絲程序員小明,越來越覺得自己沒有寫代碼的天賦,一狠心開辦了一家汽車廠,主要負責Audi某種車型的組裝,比如Q3、Q5、Q7,于是乎小明找到了技術界的裝逼高手小民幫忙給他設計了汽車廠流水線。
由于Q3、Q5、Q7這類車型,因為內(nèi)部結構差異并不大,所以一條生產(chǎn)線足以應付這3種車型,小民于是采用了工廠方法模式,開玩笑的說我們不生產(chǎn)零件,我們只是零件的組裝工。
源碼
/**
* 抽象產(chǎn)品類:定義該類產(chǎn)品的功能
* 奧迪車
*/
public abstract class AudiCar{
public abstract void drive();//汽車可以行使
public abstract void selfNavigation();//汽車可以自動巡航
}
/**
* 抽象工廠類:定義生產(chǎn)某類產(chǎn)品產(chǎn)品線
* 奧迪生產(chǎn)線
*/
public abstract class AudiFactory{
//生產(chǎn)Audi類車
public abstract <T extends AudiCar> T createCar(Class<T> clz);
}
產(chǎn)品的具體類型
/**
* Q3
*/
public class AudiQ3 extends AudiCar{
...
}
/**
* Q3
*/
public class AudiQ5 extends AudiCar{
...
}
/**
* Q3
*/
public class AudiQ7 extends AudiCar{
...
}
建成流水線
public class AudiCarFactory extends AudiFactory{
@Override
public <T extends AudiCar> T createCar(Class<T> clz){
AudiCar car = null;
try{
car = (AudiCar)Class.forName(clz.getName()).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return (T)car;
}
}
成產(chǎn)
public class Client{
public static void main(String[] agrs){
//引進流水線
AudiFactory factory = new AudiCarFactory();
//接收訂單
Class<? extends AudiCar>[] orders = new Class<>[]{AudiQ3.class,AudiQ5.class,AudiQ5.class,AudiQ3.calss,AudiQ7.calss};
//生產(chǎn)
for(int i=0,size=orders.lenth; i<size; i++){
AudiCar car = (AudiCar)factory.createCar(orders[i]);
}
}
}
解析
工廠方法模式:根據(jù)具體產(chǎn)品的類型,構建對應的產(chǎn)品線,生產(chǎn)出對應的產(chǎn)品。
工廠方法模式生產(chǎn)的是一類產(chǎn)品組:例如Audi某型號車的不同車款(入門級,舒適級,豪華級,至尊級)。正如上文對工廠模式的解釋,我們不生產(chǎn)零件,我們只是零件的組裝工