Android 設(shè)計模式:(六)抽象工廠模式

前言
本文是對《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)品類。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容