Android開發中抽象工廠模式

2021-06-23 08:34:59 字數 3482 閱讀 9033

模式解讀

abstract 是「抽象」,factory 是「工廠」,所以合起來abstract factory 就是「抽象工廠」的意思。abstract factory pattern 中的抽象工廠則是把各種抽象零件合成抽象產品。換句話說,處理的重點是在介面(api)而不是零件的具體實現。只利用介面(api)就能把零件組合成產品。

模板方法模式和生成模式的情形 是在子類進行具體的實現,而抽象工廠模式也同樣是由子類來處理具體 的實現。在子類就會出現具體工廠利用具體零件組合而成的具體產品。

程式示例

本篇涉及的類較多,較之單例模式而言理解真來比較難。一步步來吧。

本例將使用抽象工廠,製作輸出乙個html語言顯示在android 的文字上。由於涉及模擬較多,先上uml圖,再一一解釋:

抽象零件:item 類

caption欄位 是此專案的「標題」。

makehtml 方法是抽象方法,須等待子類進行實現。一旦呼叫 此方法時,其返回值即為html字串(子類要有這樣的執行功能)。

**:public abstract class item

public abstract string makehtml();

抽象零件:link 類

link 類是以抽象方式表示 html超連結的類。

url 字段用來儲存超鏈**的url。該抽象類實現item 抽象類。

** :

/*** 以抽象方式 表示html超連結的類

* @author administrator**/

public abstract class link extends item

}抽象零件:tray類

tray 類是表示 收集乙個以上的link 或tray 類。

link 和tray 則利用add 方法把它們 找出來。add 方法對於「link」和「tray」 這部分的表現方式則是將link 和 tray 的父類item 設為引數。

tray 類繼承 了item 類的抽象方法makehtml,但並未實現。所以tray 類也是抽象類。

** :

/*** 表示收集乙個以上的link 或tray的類

* @author administrator**/

public abstract class tray extends item

public void add(item item)

}抽象產品:page 類

page 類則是以抽象的方式表現整個html網頁的類。如果說link和tray是抽象零件,那麼page 類就可以說是抽象的「產品」(負責最終輸出html)。title欄位是網頁的標題,author 是網頁的作者。最後以output 輸出資料。

** :

/*** 以抽象的方式表現整個html網頁的類

* * @author administrator

* */

public abstract class page

public void add(item item)

抽象產品參與 者規定由抽象工廠參與者所產生的抽象零件和產品的介面(api)。扮演這個參與者的是link類、tray 類和page 類。

抽象工廠:factory 類

該類包含乙個getfactory 方法,利用引數class>得到乙個類的物件例項。

在抽象工廠製作零件或產品時,會用到createlink、createtray、createpage這幾個方法。這些方法都是抽象方法,實際上的具體零件和產品製作過程則交給factory 的子類來處理,方法是由這裡來規定。

** :

/*** 抽象工廠,在抽象工廠通過各個零件製作成產品

* * @author administrator

* */

public abstract class factory catch (instantiationexception e) catch (illegalacces***ception e)

return factory;

}public abstract link createlink(string caption, string url);

public abstract tray createtray(string caption);

public abstract page createpage(string title, string author);

}抽象工廠參與者則規定用來產生抽象產品參與者的物件例項的介面 (api),扮演這個角色的是factory 類。

具體工廠:listfactory 類

該類實現factory 類的抽象方法createlink 、createtray、createpage。這裡的實現工具呼叫 new 函式把listlink 、listtray 、listpage 建立出來(可以利用之前寫過的prototype 進行clone) 。

**:/**

* 具體工廠

* * @author administrator

* */

public class listfactory extends factory

@override

public page createpage(string title, string author)

@override

public tray createtray(string caption)

}具體零件:listlink 類

該類為link 的子類,負責實現link 的makehtml抽象方法。

**:public class listlink extends link

@override

public string makehtml()

}具體零件:listtray類

該類為tray 的子類,同上文一樣負責實現抽象類tray 的makehtml方法。

**:public class listtray extends tray

@override

public string makehtml()

抽象零件:listpage類

原理與上文相似。

**:public class listpage extends page

\n");

return sb.tostring();}}

具體產品參與者是實現抽象產品參與者的介面(api)。扮演這個角色分別為:listlink 類、listtray 類、listpage類。

利用工廠把零件組合成產品:abstractfactorypatternactivity 類

該類是介面ui展示入口,負責將抽象工廠的抽象零件和具體產品組裝打包,通過傳入建立的具體工廠,組裝具體產品。利用output 輸出。

**:public class abstractfactorypatternactivity extends activity

});}

}客戶參與者是乙個只使用抽象工廠參與者和抽象產品參與者的介面 (api)來完成 工作 的參與者。客戶參與者並不知道具體零件、產品或工廠。而上面的**就是負責做這件事。

Abstract Factory抽象工廠模式

abstract factory抽象工廠模式 抽象工廠是一種建立型模式,是為了解決例項化時所帶來的問題。我們先來看看是什麼問題,有的時候我們會遇到這種情況,我們需要一系列的物件。舉個例子,有一系列bmw汽車零部件的物件 輪子bmwwheel,油箱bmwoilbox,在乙個管理函式中呼叫它們,如下 c...

Abstract Factory 抽象工廠模式

工廠模式中有 工廠方法 factory method 抽象工廠 abstract factory 這兩個模式沒有很明顯的區別,區別在於需要建立物件的複雜程度上。如果我們建立物件的方法變得複雜了,我們就可能要將上例中factory變成抽象類,將共同部分封裝在抽象類中,不同部分使用子類實現。下面關於是在...

Abstract Factory 抽象工廠模式

根據uml圖簡單 進行演示過程如下 product.h ifndef product h define product h class abstractproducta class abstractproductb class producta1 public abstractproducta cl...