前言
本文是對《Adroid 源碼設(shè)計模式解析與實(shí)戰(zhàn)》 何紅輝、關(guān)愛民 著 人民郵電出版社所做的讀書筆記。文章是對本書的一些列學(xué)習(xí)筆記,如若有侵犯到作者權(quán)益,還望作者能聯(lián)系我,我會及時下架。
這本書不錯,有興趣的同學(xué)可以買原書看看。
感興趣的朋友歡迎加入學(xué)習(xí)小組QQ群: 193765960。
版權(quán)歸作者所有,如有轉(zhuǎn)發(fā),請注明文章出處:https://xiaodanchen.github.io/archives/
相關(guān)文章:
Android 設(shè)計模式:(一)面向?qū)ο蟮牧笤瓌t
Android 設(shè)計模式:(二)單例模式
Android 設(shè)計模式:(三)Builder模式
Android 設(shè)計模式:(四)原型模式
Android 設(shè)計模式:(五)工廠方法模式
Android 設(shè)計模式:(六)抽象工廠模式
Android 設(shè)計模式:(七)策略模式
1. 抽象工廠模式的定義
為創(chuàng)建一組相關(guān)或者相互依賴的對象提供一個接口。(生產(chǎn)某款產(chǎn)品的零部件)
2. 抽象工廠模式的實(shí)現(xiàn)
上一篇講到,小明開了個Audi車組裝工廠。隨著小明生意越做越大,安奈不住騷動的心的小明,開始向產(chǎn)品上游伸手,丫的要自己生產(chǎn)汽車零配件!
但是談何容易, Audi的Q3,Q5,Q7使用的零件各不相同,這可愁壞了小明。沒辦法,只能再找找小民幫忙拿主意了。最終小民給出了終極解決方案:抽象工廠模式。
按照小民的設(shè)計,小明開辦了3個零件工廠:Q3零部件工廠、Q5零部件工廠、Q7零部件工廠。
源碼
假設(shè)小明的零件工廠要生產(chǎn)三類產(chǎn)品:輪胎、發(fā)動機(jī)、制動系統(tǒng)。
/**
* 抽象零件:輪胎
*/
public interface ITire{
public void tire();
}
/**
* 抽象零件:發(fā)動機(jī)
*/
public interface IEngine{
public void engine();
}
/**
* 抽象零件:剎車系統(tǒng)
*/
public interface IBrake{
public void brake();
}
/**
* 抽象零件工廠
*/
public abstract class AbstractFactory{
//生產(chǎn)輪胎
public abstract ITire createTire();
//生產(chǎn)發(fā)動機(jī)
public abstract IEngine createEngine();
//生產(chǎn)制動系統(tǒng)
public abstract IBrake createBrake();
}
以Q3汽車零件生產(chǎn)廠為例
//Q3車胎生產(chǎn)
public class Q3Tire implements ITire{
public void tire(){...};
}
//Q3發(fā)動機(jī)生產(chǎn)
public class Q3Engine implements IEngine{
public void engine(){...};
}
//Q3剎車系統(tǒng)生產(chǎn)
public class Q3Brake implements IBrake{
public void brake(){...};
}
/**
* Q3零件工廠
*/
public class Q3Factory extends AbstractFactory{
//生產(chǎn)輪胎
public ITire createTire(){
return new Q3Tire();
};
//生產(chǎn)發(fā)動機(jī)
public IEngine createEngine(){
return new Q3Engine();
};
//生產(chǎn)制動系統(tǒng)
public IBrake createBrake(){
return new Q3Brake();
};
}
零件工廠建好了,開足馬力投產(chǎn)吧
public class Client{
public static void main(String[] args){
//構(gòu)建Q3工廠
AbstractFactory factory = new Q3Factory();
//生產(chǎn)Q3的零件
factory.createTire().tire();
factory.createEngine().engine();
factory.createBrake().brake();
}
}
解析
每增加一個產(chǎn)品工廠,就要創(chuàng)建一堆的產(chǎn)品零件類,如果工廠類過多,那么就會導(dǎo)致類文件非常多。所以在實(shí)際開發(fā)中,抽象工廠模式的運(yùn)用要權(quán)衡
3. 總結(jié)
優(yōu)點(diǎn):
接口與實(shí)現(xiàn)分離,客戶端使用抽象工廠來生產(chǎn)產(chǎn)品,生產(chǎn)過程完全面向接口,不需要知道具體實(shí)現(xiàn)。
缺點(diǎn):
工廠類增加很多,類文件會增加很多。不太容易擴(kuò)展新的產(chǎn)品類。