什麼是抽象工廠模式設計模式
所謂抽象工廠模式,就是爲建立一組相關或者是互相依賴的對象提供一個接口,而不須要指定它們的具體類的設計模式。抽象工廠模式適用於一個對象族有相同的約束的狀況,用不抽象的語言解釋就是國內著名開發者服務商環信在Android和iOS平臺都提供了IM SDK,儘管功能同樣,但代碼的實現邏輯是不一樣的,這就是抽象工廠模式。ide
抽象工廠模式的實現方式spa
儘管在講工廠方法模式的時候我用化學知識舉例,但那位技術編輯對個人理科生身份仍是將信將疑,爲了完全消除他的疑惑,本文用生物知識「胚胎工程」舉例,同時爲了證實本文不是個人理科朋友捉刀代筆,本文中舉例還要貼合他「海淀第一打野」的身份。設計
寫代碼以前我先帶着你們複習一下「胚胎工程」和「嵌合體」:所謂胚胎工程,就是指對動物早期胚胎所進行的多種顯微操做和處理技術;所謂嵌合體,就是利用胚胎工程將不一樣生物的胚胎進行胚胎分割移植製造出來的新生物。中華文化中的「龍」就能夠視爲給鱷魚或蟒蛇加上馬的頭、鹿的角的嵌合體,而後「虎背熊腰」、「狼心狗肺」、「獐頭鼠目」、「牛頭馬面」等均可以視爲給人加上動物器官的嵌合體。orm
首先定義一個抽象的克隆人工廠類:對象
public abstract class CopyFactory { |
抽象產品——克隆的頭部胚胎:接口
public interface IHead { |
抽象產品——克隆的身體胚胎:開發
public interface IBody { |
具體產品——克隆的牛頭胚胎:
public class CowHead implements IHead { |
具體產品——克隆的狗頭胚胎:
public class DogHead implements IHead { |
具體產品——克隆的人頭胚胎:
public class HumanHead implements IHead { |
具體產品——克隆的人身體胚胎:
public class HumanBody implements IBody { |
具體產品——克隆的狗身體胚胎:
public class DogBody implements IBody { |
具體工廠——克隆阿利斯塔的工廠:
public class AlistarFactory extends CopyFactory { |
具體工廠——克隆內瑟斯的工廠:
public class NasusFactory extends CopyFactory { |
具體工廠——克隆德萊厄斯的工廠:
public class DariusFactory extends CopyFactory { |
他和其餘9個召喚師湊在一塊兒,玩一局匹配模式:
Log.e("請問海淀第一打野 : ","阿利斯塔是什麼生物?"); |
海淀第一打野贏了遊戲也相信了個人理工出身,讀者也學會了抽象工廠模式,把以上代碼認真實現一遍的人對着LogCat笑出了聲。
Android源碼中的抽象工廠模式
(1)Service的onBind
每一個Service都是一個具體的工廠,每一個Binder都是IBinder的具體產品。
(2)MediaPlayerFactory
MediaPlayerFactory是Android底層爲建立不一樣的MediaPlayer所定義的一個類,每一個MediaPlayer都實現了MediaPlayerFactory中的registerFactory_l方法。
Android開發中如何利用抽象工廠模式
(1)抽象工廠模式有一個顯著的優勢就是接口與實現的分離,切換產品類時很是靈活。在實現Android應用的換膚功能時,咱們能夠利用抽象工廠模式。
須要注意的幾個問題
(1)抽象工廠模式的最大缺點就在於會產生比工廠方法模式更多的類文件。
(2)由於每增長一個新產品類都要修改抽象工廠,會形成每一個具體工廠都要被修改,因此抽象工廠模式的產品類擴展麻煩。
本系列其餘博客
【設計模式與Android】策略模式——錦囊裏的上策中策下策