【設計模式與Android】抽象工廠模式——嵌合體克隆工廠
什麽是抽象工廠模式
所謂抽象工廠模式,就是為創建一組相關或者是互相依賴的對象提供一個接口,而不需要指定它們的具體類的設計模式。抽象工廠模式適用於一個對象族有相同的約束的情況,用不抽象的語言解釋就是國內著名開發者服務商環信在Android和iOS平臺都提供了IM SDK,盡管功能一樣,但代碼的實現邏輯是不同的,這就是抽象工廠模式。
抽象工廠模式的實現方式
盡管在講工廠方法模式的時候我用化學知識舉例,但那位技術編輯對我的理科生身份還是將信將疑,為了徹底消除他的疑惑,本文用生物知識“胚胎工程”舉例,同時為了證明本文不是我的理科朋友捉刀代筆,本文中舉例還要貼合他“海澱第一打野”的身份。
寫代碼之前我先帶著大家復習一下
首先定義一個抽象的克隆人工廠類:
public abstract class CopyFactory { |
抽象產品
public interface IHead { |
抽象產品——克隆的身體胚胎:
public interface IBody { |
具體產品——克隆的牛頭胚胎:
public class CowHead implements IHead { |
具體產品——克隆的狗頭胚胎:
public class DogHead implements IHead { public void getHead() { Log.e("DogHead","狗頭~~"); } } |
具體產品——克隆的人頭胚胎:
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)因為每增加一個新產品類都要修改抽象工廠,會造成每個具體工廠都要被修改,所以抽象工廠模式的產品類擴展麻煩。
本文出自 “玖哥的書房” 博客,請務必保留此出處http://dongfeng9ge.blog.51cto.com/9191243/1972484
【設計模式與Android】抽象工廠模式——嵌合體克隆工廠