1. 程式人生 > >java的工廠模式(備忘)

java的工廠模式(備忘)

一、java工廠模式

1、一般情況下,我們如果呼叫介面,就會知道它的實現方法,比如:

UserDao ud=new UserDaoImpl();這樣就跟我們設計介面相背離,介面的思想就是“封裝隔離”,通常提到的封裝是對資料的封裝,但是這裡的封裝是指“對被隔離體的行為的封裝”,或者是“對被隔離體的職責的封裝”;而隔離指的是外部呼叫和內部實現,外部呼叫只能通過介面進行呼叫,而外部呼叫是不知道內部具體實現的,也就是說外部呼叫和內部實現是被介面隔離開的。


在java程式設計裡面,非常講究層的劃分和模組的劃分。通常按照三層來劃分java程式,分別是表現層、邏輯層、資料層,它們之間都是用介面來通訊的。


圖1 基本的三層結構示意圖


圖2 一個層內部的各個模組互動示意圖

所謂元件,從設計上講,元件就是能完成一定功能的封裝體,小到一個類,大到一個系統,都可以稱為元件,因為一個小系統放到更大的系統裡面去,也就是當個元件而已。

2、問題:在java程式設計中,出現只知道介面而不知道實現,該怎麼辦?就像上述的例子,在client中,它知道要使用UserDao介面,但是不知道由誰實現,也不知道如何實現,從而得不到介面物件,就無法使用該介面,該怎麼辦?這個問題的一個合理解決方案就是簡單工廠。

3、簡單工廠:

3.1、什麼是簡單工廠:提供一個建立物件例項的功能,而無須關心起具體實現。被建立例項的型別可以使介面、抽象類,也可以是具體的類。

3.2、分析上面的問題,雖然不能讓模組外部知道模組內的具體實現,但是模組內部是可以知道實現類的,而且建立介面是需要具體實現類的。

那麼在模組內部新建立一個類,在這個類裡面來建立介面,然後把建立好的介面返回給客戶端,這樣外部應用就只需要根據這個類來獲取相應的介面物件,然後就可以操作介面定義的方法了。把這樣的物件稱為簡單工廠,就叫做Factory吧。

這樣一來,客戶端就可以通過這個Factory來獲取需要的介面物件,然後呼叫介面的方法來實現需要的功能,而且客戶端也不用在關心具體實現了。

3.3、簡單工廠結構和說明


圖3 簡單工廠的結構

這個,用了Factory,就不需要在UserDao ud=new UserDaoImpl(),不需要new了,這個直接呼叫Factory.createXXX就行了。