Factory 方法模式

來源:互聯網
上載者:User

標籤:style   blog   http   java   使用   io   2014   ar   

1、Factory 方法模式中的角色:

Factory 方法模式的用戶端對抽象工廠類、抽象產品進行編程,也就是應該針對抽象編程,而不應該是針對具體工廠類及具體產品編程。

從可以看出,這個使用了Factory 方法模式的系統涉及到以下的角色:

(1)、抽象工廠(Creator)角色:擔任這個角色的是Factory 方法模式的核心,它是與應用程式無關的。任何在模式中建立對象的工廠類必須實現這個介面。在上面的系統

中這個角色由Java 介面Creator 扮演;在實際的系統中,這個角色也常常使用抽

象Java 類實現。

(2)、具體工廠(Concrete Creator)角色:擔任這個角色的是實現了抽象工廠介面的具體Java 類。具體工廠角色含有與應用密切相關的邏輯,並且受到應用程式的調用

以建立產品對象。在本系統中給出了兩個這樣的角色,也就是具體Java 類

ConcreteCreator1 和ConcreteCreator2。

(3)、抽象產品(Product)角色:Factory 方法模式所建立的對象的超類型,也就是產品對象的共同父類或共同擁有的介面。在本系統中,這個角色由Java 介面Product 扮

演;在實際的系統中,這個角色也常常使用抽象Java 類實現。

(4)、具體產品(Concrete Product)角色:這個角色實現了抽象產品角色所聲明的介面。Factory 方法模式所建立的每一個對象都是某個具體產品角色的執行個體。

2、原廠模式簡單:

然後由相應的工廠角色建立相應的產品角色,Factory 方法模式的應用如所示,圖中的虛線代表建立(依賴)關係。

Factory 方法模式並沒有限制產品等級結構的層數。一般的書籍中都以兩個層次為例,第

一層是抽象產品層,第二層是具體產品層。但是在實際的系統中,產品常常有更為複雜的

層次。

3、Factory 方法模式時序圖:

4、Factory 方法模式在JAVA JDK中應用:

應用情境1:所有的Java 聚集都實現java.util.Collection 介面,這個介面規定所有的Java 聚集必須提供一個iterator()方法,返還一個Iterator 類型的對象,如所示。

一 個具體的Java 聚集對象會通過這個iterator()方法介面返還一個具體的Iterator 類。可以看出,這個iterator()方法就是一個Factory 方法。

應用情境2:類似地,Java 的列是一種特殊的Java 聚集。所有的Java 除了實現了Collection 介面之外,還實現了一個List 介面。這個List 介面給出了兩個Factory 方法,一個是上面已經討論過的iterator()方法,返還一個Iterator 類型的對象;另一個是listIterator()方法,返還一個ListIterator 類型的對象。

有趣的是,Iterator 和ListIterator 組成一個繼承的等級結構,後者是前者的子介面。如所示。

應用情境3:URL 與URLConnection 中的應用,其實這個更像是簡單原廠模式。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.