前言
本文是對(duì)《Adroid 源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》 何紅輝旷太、關(guān)愛(ài)民 著 人民郵電出版社所做的讀書筆記劈榨。文章是對(duì)本書的一些列學(xué)習(xí)筆記浙炼,如若有侵犯到作者權(quán)益,還望作者能聯(lián)系我土童,我會(huì)及時(shí)下架诗茎。
這本書不錯(cuò),有興趣的同學(xué)可以買原書看看献汗。
感興趣的朋友歡迎加入學(xué)習(xí)小組QQ群: 193765960敢订。
版權(quán)歸作者所有,如有轉(zhuǎn)發(fā)罢吃,請(qǐng)注明文章出處:https://xiaodanchen.github.io/archives/
相關(guān)文章:
Android 設(shè)計(jì)模式:(一)面向?qū)ο蟮牧笤瓌t
Android 設(shè)計(jì)模式:(二)單例模式
Android 設(shè)計(jì)模式:(三)Builder模式
Android 設(shè)計(jì)模式:(四)原型模式
Android 設(shè)計(jì)模式:(五)工廠方法模式
Android 設(shè)計(jì)模式:(六)抽象工廠模式
Android 設(shè)計(jì)模式:(七)策略模式
1. 工廠方法模式的定義
定義一個(gè)用于創(chuàng)建對(duì)象的接口楚午,讓子類決定實(shí)例化那個(gè)類。(將零部件組裝成不同的產(chǎn)品)
2. 工廠方法模式的實(shí)現(xiàn)
先說(shuō)明兩個(gè)接口:抽象產(chǎn)品類和抽象工廠類尿招。
抽象產(chǎn)品類:定義了產(chǎn)品族矾柜,同一產(chǎn)品組的產(chǎn)品具有相似的功能阱驾,因此可以使用同一個(gè)產(chǎn)品線。
抽象工廠類:定義了產(chǎn)品線
2.1 廠長(zhǎng)小明的幸福人生
屌絲程序員小明怪蔑,越來(lái)越覺(jué)得自己沒(méi)有寫代碼的天賦里覆,一狠心開(kāi)辦了一家汽車廠,主要負(fù)責(zé)Audi某種車型的組裝饮睬,比如Q3租谈、Q5、Q7捆愁,于是乎小明找到了技術(shù)界的裝逼高手小民幫忙給他設(shè)計(jì)了汽車廠流水線割去。
由于Q3、Q5昼丑、Q7這類車型呻逆,因?yàn)閮?nèi)部結(jié)構(gòu)差異并不大,所以一條生產(chǎn)線足以應(yīng)付這3種車型菩帝,小民于是采用了工廠方法模式咖城,開(kāi)玩笑的說(shuō)我們不生產(chǎn)零件,我們只是零件的組裝工呼奢。
源碼
/**
* 抽象產(chǎn)品類:定義該類產(chǎn)品的功能
* 奧迪車
*/
public abstract class AudiCar{
public abstract void drive();//汽車可以行使
public abstract void selfNavigation();//汽車可以自動(dòng)巡航
}
/**
* 抽象工廠類:定義生產(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){
//引進(jìn)流水線
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)品的類型宜雀,構(gòu)建對(duì)應(yīng)的產(chǎn)品線,生產(chǎn)出對(duì)應(yīng)的產(chǎn)品握础。
工廠方法模式生產(chǎn)的是一類產(chǎn)品組:例如Audi某型號(hào)車的不同車款(入門級(jí)辐董,舒適級(jí),豪華級(jí)禀综,至尊級(jí))简烘。正如上文對(duì)工廠模式的解釋,我們不生產(chǎn)零件定枷,我們只是零件的組裝工