java資料庫工廠模式
⑴ java的工廠模式有哪一些,分別有什麼作用,一般用在哪些地方
我簡單的說下,舉個例子,當我們的程序結構比較繁雜時,比如有100個類,而類中又有很多方法,這些方法之間都互相有洞消擾依賴關系,也就是一個方法之間的某段邏輯處理需要用到另一個類中的代碼邏輯,這種時候對於整個程序而言是非常不利於開發的(我們需要考慮到很多類、方法之間的耦合問題),那麼就有一個概念了,也就是面對介面編程。通俗的說就是把類中的方法封裝起來,外部調用的人完全不需要考慮方法是如何實現的,但是這樣做也有一個不好的地方,我們的介面是不提供方法實現的,而需要在類中實現介面的方法。那麼問題產生了,我們在new介面對象的時候需要明確的知道他的實例類。
想像一下,如果程序在繼續龐大,介面非常多,介面實例類非常多,這樣又會產生我們之前的問題(我們需要考慮到很多類、方法之間的耦合問題)那麼這個時候就產生了一中設計思想,也就是工廠模式,這種模式的核心思想就是管理介面的實例對象,把介面和實例對象之間的關系封裝起來處理,外部需要用到某個介面的實例時,由工廠進行分配,而不需要關注具體是哪個實例。
如果你做到比較復雜的納旦程序時你應該就能體會橋攔到了。
⑵ Java工廠模式與傳統模式的區別
相似性
在模式結構上,兩者很相似;
差異性
用途不衫侍一樣
工廠是創建型模式,其作用就是創建對象;
傳統模式是行為型模式,其作用是讓一個對象在許多行為中選擇一種行為;關注點不一樣
工廠模式關注對象創建。
傳統模式關注行為的封裝。解決不同的問題
工廠模式是創建型的設計模式,接受指令,創建出符合要求的實例;主要解決的是資源的統一分發,將對象的創建完全獨立出來,讓對象的創建和具體的使用客戶無關。主要應用在多資料庫選擇,類庫文件載入等。
傳統模式啟帶是為了解決的是策略的切換與擴展,更簡潔的說是定義策略族,分別悄塌蘆封裝起來,使其可以相互替換,傳統模式讓策略的變化獨立於使用策略的客戶。工廠模式相當於黑盒子,傳統模式相當於白盒子;
⑶ java中 什麼是工廠
工廠是一種設計模式!
為何使用?
工廠模式是我們最常用的模式了,著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程序系統可以說是隨處可見。
為什麼工廠模式是如此常用?因為工廠模式就相當於創建實例對象的new,我們經常要根據類Class生成實例對象,如A a=new A() 工廠模式也是用來創建實例對象的,所以以後new時就要多個心眼,是否可以考慮實用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統帶來更大的可擴展性和盡量少的修改量。
我們以類Sample為例, 如果我們要創建Sample的實例對象:
Sample sample=new Sample();
可是,實際情況是,通常我們都要在創建sample實例時做點初始化的工作,比如賦值 查詢資料庫等。
首先,我們想到的是,可以使用Sample的構造函數,這樣生成實例就寫成:
Sample sample=new Sample(參數);
但是,如果創建sample實例時所做的初始化工作不是象賦值這樣簡單的事,可能是很長一段代碼,如果也寫入構造函數中,那你的代碼很難看了(就需要Refactor重整)。
為什麼說代碼很難看,初學者可能沒有這種感覺,我們分析如下,初始化工作如果是很長一段代碼,說明要做的工作很多,將很多工作裝入一個方法中,相當於將很多雞蛋放在一個籃子里,是很危險的,這也是有背於Java 面向對象的原則,面向對象的封裝(Encapsulation)和分派(Delegation)告訴我們,盡量將長的代碼分派「切割」成每段,將每段再 「封裝」起來(減少段和段之間偶合聯系性),這樣,就會將風險分散,以後如果需要修改,只要更改每段,不會再發生牽一動百的事情。
在本例中,首先,我們需要將創建實例的工作與使用實例的工作分開, 也就是說,讓創建實例所需要的大量初始化工作從Sample的構造函數中分離出去。
這時我們就需要Factory工廠模式來生成對象了,不能再用上面簡單new Sample(參數)。還有,如果Sample有個繼承如MySample, 按照面向介面編程,我們需要將Sample抽象成一個介面.現在Sample是介面,有兩個子類MySample 和HisSample .我們要實例化他們時,如下:
Sample mysample=new MySample();
Sample hissample=new HisSample();
隨著項目的深入,Sample可能還會"生出很多兒子出來", 那麼我們要對這些兒子一個個實例化,更糟糕的是,可能還要對以前的代碼進行修改:加入後來生出兒子的實例.這在傳統程序中是無法避免的.
但如果你一開始就有意識使用了工廠模式,這些麻煩就沒有了.
工廠方法
你會建立一個專門生產Sample實例的工廠:
public class Factory{
public static Sample creator(int which){
//getClass 產生Sample 一般可使用動態類裝載裝入類。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
那麼在你的程序中,如果要實例化Sample時.就使用
Sample sampleA=Factory.creator(1);
這樣,在整個就不涉及到 Sample的具體子類,達到封裝效果,也就減少錯誤修改的機會,這個原理可以用很通俗的話來比喻:就是具體事情做得越多,越容易范錯誤.這每個做過具體工作的人都深有體會,相反,官做得越高,說出的話越抽象越籠統,范錯誤可能性就越少.好象我們從編程序中也能悟出人生道理?呵呵.
使用工廠方法 要注意幾個角色,首先你要定義產品介面,如上面的Sample,產品介面下有Sample介面的實現類,如SampleA,其次要有一個factory類,用來生成產品Sample,如下圖,最右邊是生產的對象Sample:
進一步稍微復雜一點,就是在工廠類上進行拓展,工廠類也有繼承它的實現類concreteFactory了。
抽象工廠
工廠模式中有: 工廠方法(Factory Method) 抽象工廠(Abstract Factory).
這兩個模式區別在於需要創建對象的復雜程度上。如果我們創建對象的方法變得復雜了,如上面工廠方法中是創建一個對象Sample,如果我們還有新的產品介面Sample2.
這里假設:Sample有兩個concrete類SampleA和SamleB,而Sample2也有兩個concrete類Sample2A和SampleB2
那麼,我們就將上例中Factory變成抽象類,將共同部分封裝在抽象類中,不同部分使用子類實現,下面就是將上例中的Factory拓展成抽象工廠:
public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
public Sample creator(){
.........
return new SampleA
}
public Sample2 creator(String name){
.........
return new Sample2A
}
}
public class BombFactory extends Factory{
public Sample creator(){
......
return new SampleB
}
public Sample2 creator(String name){
......
return new Sample2B
}
}
從上面看到兩個工廠各自生產出一套Sample和Sample2,也許你會疑問,為什麼我不可以使用兩個工廠方法來分別生產Sample和Sample2?
抽象工廠還有另外一個關鍵要點,是因為 SimpleFactory內,生產Sample和生產Sample2的方法之間有一定聯系,所以才要將這兩個方法捆綁在一個類中,這個工廠類有其本身特徵,也許製造過程是統一的,比如:製造工藝比較簡單,所以名稱叫SimpleFactory。
在實際應用中,工廠方法用得比較多一些,而且是和動態類裝入器組合在一起應用。
⑷ 什麼是Java的工廠模式
factory模式不需要建立什麼包,完全得靠你對factory模式的理解,工廠模式基本上應該是體現了一個多態的概念,用戶只關心結果,而不需要關心其具體過程...
工廠模式有三個參與者,抽象產品(Proct)、工廠(Creator)和具體產品(ConcreteProct)。客戶只會看到工廠和抽象產品。
public interface Proct{
public String getName();
}
public class ConcreteProct implements Proct{
public String getName(){
return "產品1";
}
}
public class Creator{
public static Proct create1(){
return new ConcreteProct();
}
}
工廠模式的作用在於將創建具體產品的方法由工廠類控制,客戶只需要知道產品的抽象類型
⑸ java簡單工廠模式是什麼
就是專門寫一個類,他有一個方法根據傳入的參數不同,返回不同的對象。
比如有一台自動售貨機AutoSeller, 然後它賣很多飲料Drink, 有茶Tea, 有可樂Cola, 當你去買的時候,你可能是通過按不同的按鈕,但對AutoSeller的實現來說,他可能都是同樣的方法,只是根據不同的參數(按鈕),返回給你不同的對象(Tea或Cola)。
public interface Drink {
enum Type {TEA, COLA};
}
public Tea implements Drink {
}
public Cola implements Drink {
}
public class AutoSeller {//工廠
public static Drink getDrink(Drink.Type type) {
switch(type) {
case TEA:
return new Tea();
case COLA:
return new Cola();
default:break;
}
}
}
如上, 在你選擇飲料按下按鈕里, 自動售貨機的代碼可能只要執行AutoSeller.getDrink(type)就可以返回你想要的飲料了。
之所以要把Drink定義成介面,一般來講,用這種架構的話, Drink裡面會聲明一些介面方法, 這些方法是Tea和Cola都需要的, 但Drink不用關心方法的具體實現, 具體實現只要由Tea和Cola去完成。
而你通過AutoSeller.getDrink(type)去拿到一個Drink對象後,可以用這個對象直接去調Drink中聲明的方法。
⑹ Java程序設計中工廠設計模式思想是怎樣的
工廠模式主要用一下幾種形態:
1:簡單工廠(Simple Factory)。
2:工廠方法(Factory Method)。
3:抽象工廠(Abstract Factory)。
簡單工廠並不簡單,它是整個模式的核心,一旦他出了問題,整個模式都將受影響而不能工作,為了降低風險和為日後的維護、擴展做准備,我們需要對它進行重構,引入工廠方法。工廠方法為工廠類定義了介面,用多態來削弱了工廠類的職能。
工廠方法和簡單工廠的主要區別是,簡單工廠是把創建產品的職能都放在一個類裡面,而工廠方法則把不同的產品放在實現了工廠介面的不同工廠類裡面,這樣就算其中一個工廠類出了問題,其他工廠類也能正常工作,互相不受影響,以後增加新產品,也只需要新增一個實現工廠介面工廠類,就能達到,不用修改已有的代碼。但工廠方法也有他局限的地方,那就是當面對的產品有復雜的等級結構的時候
抽象工廠的意圖在於創建一系列互相關聯或互相依賴的對象。