參考文獻:
http://en.wikipedia.org/wiki/Abstract_factory_pattern
??? 抽象工廠模式(英語:Abstract Factory)是一種常見的設計模式。此模式為一個產(chǎn)品家族提供了統(tǒng)一的創(chuàng)建接口。當需要這個產(chǎn)品家族的某一系列的時候,可以從抽象工廠中選出相對系的系列來創(chuàng)建一個具體的工廠類別。
例子
??? 假設我們有兩種產(chǎn)品接口 Button 和 Border ,每一種產(chǎn)品都支持多種系列,比如 Mac 系列和 Windows 系列。這樣每個系列的產(chǎn)品分別是 MacButton, WinButton, MacBorder, WinBorder 。為了可以在運行時刻創(chuàng)建一個系列的產(chǎn)品族,我們可以為每個系列的產(chǎn)品族建立一個工廠 MacFactory 和 WinFactory 。每個工廠都有兩個方法 CreateButton 和 CreateBorder 并返回對應的產(chǎn)品,可以將這兩個方法抽象成一個接口 AbstractFactory 。這樣在運行時刻我們可以選擇創(chuàng)建需要的產(chǎn)品系列。
適用性
在以下情況可以使用抽象工廠模式
一個系統(tǒng)要獨立于它的產(chǎn)品的創(chuàng)建、組合和表示時。
一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。
當你要強調(diào)一系列相關的產(chǎn)品對象的設計以便進行聯(lián)合使用時。
當你提供一個產(chǎn)品類庫,而只想顯示它們的接口而不是實現(xiàn)時
優(yōu)點
具體產(chǎn)品從客戶代碼中被分離出來
容易改變產(chǎn)品的系列
將一個系列的產(chǎn)品族統(tǒng)一到一起創(chuàng)建
缺點
在產(chǎn)品族中擴展新的產(chǎn)品是很困難的,它需要修改抽象工廠的接口
http://en.wikipedia.org/wiki/Abstract_factory_pattern
??? 抽象工廠模式(英語:Abstract Factory)是一種常見的設計模式。此模式為一個產(chǎn)品家族提供了統(tǒng)一的創(chuàng)建接口。當需要這個產(chǎn)品家族的某一系列的時候,可以從抽象工廠中選出相對系的系列來創(chuàng)建一個具體的工廠類別。
例子
??? 假設我們有兩種產(chǎn)品接口 Button 和 Border ,每一種產(chǎn)品都支持多種系列,比如 Mac 系列和 Windows 系列。這樣每個系列的產(chǎn)品分別是 MacButton, WinButton, MacBorder, WinBorder 。為了可以在運行時刻創(chuàng)建一個系列的產(chǎn)品族,我們可以為每個系列的產(chǎn)品族建立一個工廠 MacFactory 和 WinFactory 。每個工廠都有兩個方法 CreateButton 和 CreateBorder 并返回對應的產(chǎn)品,可以將這兩個方法抽象成一個接口 AbstractFactory 。這樣在運行時刻我們可以選擇創(chuàng)建需要的產(chǎn)品系列。
package com.sinosoft.train.gof.cp; interface GUIFactory { public Button createButton(); } class WinFactory implements GUIFactory { public Button createButton() { return new WinButton(); } } class OSXFactory implements GUIFactory { public Button createButton() { return new OSXButton(); } } interface Button { public void paint(); } class WinButton implements Button { public void paint() { System.out.println("I'm a WinButton"); } } class OSXButton implements Button { public void paint() { System.out.println("I'm an OSXButton"); } } class Application { public Application(GUIFactory factory){ Button button = factory.createButton(); button.paint(); } } public class AbstractFactory { public static void main(String[] args) { new Application(createOsSpecificFactory()); } public static GUIFactory createOsSpecificFactory() { int sys = 0; if (sys == 1) { return new WinFactory(); } else { return new OSXFactory(); } } }
適用性
在以下情況可以使用抽象工廠模式
一個系統(tǒng)要獨立于它的產(chǎn)品的創(chuàng)建、組合和表示時。
一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。
當你要強調(diào)一系列相關的產(chǎn)品對象的設計以便進行聯(lián)合使用時。
當你提供一個產(chǎn)品類庫,而只想顯示它們的接口而不是實現(xiàn)時
優(yōu)點
具體產(chǎn)品從客戶代碼中被分離出來
容易改變產(chǎn)品的系列
將一個系列的產(chǎn)品族統(tǒng)一到一起創(chuàng)建
缺點
在產(chǎn)品族中擴展新的產(chǎn)品是很困難的,它需要修改抽象工廠的接口
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
