《java與模式》學習系列——簡單原廠模式

來源:互聯網
上載者:User

 

一、簡單原廠模式的結構

簡單原廠模式就是由一個工廠類根據傳入的參量決定建立出哪一種產品類的執行個體。下面以一個示意性的實現為例說明簡單原廠模式的結構如所示。

註:其中Creator類提供的是靜態Factory 方法,如:publicstatic Product factory(){}。

二、簡單原廠模式與其他模式的關係

單例模式

單例模式使用了簡單原廠模式。換言之,單例類具有一個靜態Factory 方法提供自身的執行個體,一個抽象產品類同時是子類的工廠。

多例模式

多例模式是對單例模式的推廣。多例模式與單例模式的共同之處在於它們都禁止外界直接將之執行個體化,同時通過靜態Factory 方法向外界提供迴圈使用的自身的執行個體。它們的不同在於單例模式僅有一個執行個體,而多例模式則可以有多個執行個體。

多例模式往往具有 一個聚集屬性,通過向這個聚集屬性登記已經建立過的執行個體達到迴圈使用執行個體的目的。一般而言,一個典型的多例類具有某種內部狀態,這個內部狀態可以用來區分各個執行個體,而對應於每一個內部狀態,都只有一個執行個體存在。

三、簡單原廠模式在java中的應用

DateFormat與簡單原廠模式

java.text.DateFormat與其子類用來格式化一個本地日期或時間,這個工具類在處理英語和非英語的日期及時間格式上很有用處。DateFormat與SimpleDateFomat類圖如下:

DateFormatr的Factory 方法是靜態方法,並不是普通的方法。getDateInstance方法並沒有調用DateFormat的構造子來提供自己的執行個體,作為一個Factory 方法,getDateInstance方法做了一些有趣的事情。它所做的事情基本上可以分成兩部分:一是運用多態性;二是使用靜態Factory 方法。SimpleDateFormat是抽象類別DateFormat的具體子類,這就意味著SimpleDateFormat是一個DateFormat類型的子類型;而getDateInstance方法完全可以返回simpleDateFormat的執行個體,並且僅將它聲明為DateFormat類型。這就是最純正的多態性原則的運用。

這種將Factory 方法的返還類型設定成抽象類別型的做法,叫做針對抽象編程,這是依賴倒轉原則(DIP)的應用。

SAX2庫中的XMLReaderFactory與簡單原廠模式

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.