工廠模式提供建立物件的介面。
工廠模式分為三類:簡單工廠模式(****** factory), 工廠方法模式(factory method)和抽象工廠模式(abstract factory).
gof在《設計模式〉中將工廠模式分為兩類:工廠方法模式(factory method)和抽象工廠模式(abstract factory)。
1. 簡單工廠模式(****** factory)
簡單工廠模式又叫做靜態工廠方法模式。簡單工廠模式的實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類(這些產品類繼承自乙個父類或介面)的例項。
該模式中包含的角色及職責:
工廠(creator)角色:它是簡單工廠模式的核心,負責實現建立所有例項的內部邏輯。工廠類可以被外界直接呼叫,建立所需要的產品物件。
抽象產品角色:它負責描述所有例項所共有的公共介面。
具體產品角色:是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。
缺點:在工廠類中集中了所有例項的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了乙個工廠類中;對系統的維護和擴充套件不利;
使用場景:負責建立的物件比較少;客戶只知道傳入工廠類的引數,對於如何建立物件的邏輯不關心;容易違反高內聚責任分配原則,所以只在很簡單的情況下應用;
類圖:
例項:
//抽象產品角色
public inte***ce iproduct
//具體產品角色
public class product_a implements iproduct
}//具體產品角色
public class product_b implements iproduct
}//工廠角色
public class creator}}
2. 工廠方法模式(factory method)工廠方法模式是簡單工廠方法模式的衍生,它的核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,使得系統可以在不修改具體工廠角色的情況下引用新的產品。
在這個模式中,乙個抽象工廠對應乙個抽象產品,乙個具體工廠對應乙個具體產品。
工廠方法模式是最典型的模板方法模式(template method pattern)應用。
該模式中包含的角色及職責:
抽象工廠(creator)角色:工廠方法模式的核心,任何在模式中建立的物件的工廠必須實現這個介面。
具體工廠(concrete creator)角色:實現抽象工廠介面的具體工廠類,包含應用程式的邏輯。
抽象產品(product)角色:產品物件的共同父類或共同擁有的介面。
具體產品(concrete product)角色:實現了抽象產品角色定義的介面,其具體產品有專門的具體工廠建立。
使用場景:
對於某個產品,呼叫者清楚知道應該使用哪個具體工廠服務,例項化該具體工廠,生產出具體的產品來;
只是需要一種產品,對於那個工廠生產的並不關心,最終選用哪個具體工廠由生產者一方決定,它根據當前系統的情況來例項化乙個具體的工廠返回給使用者,這個決策過程對於使用者來說是透明的。
類圖:
例項:
//抽象工廠
public inte***ce creator
//抽象產品
public inte***ce light
//具體產品
public class bullblight implements light
public void trunoff()
}//具體產品
public class tubelight implements light
public void trunoff()
}//具體工廠
public class bullbcreator implements creator
}//具體工廠
public class tubecreator implements creator
}public class client
}
3. 抽象工廠模式(abstract factory)抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供乙個介面,使客戶端在不必指定產品的具體情況下,建立多個產品族中的產品物件。
類圖:
例項:
//抽象工廠角色
public inte***ce abstractfactory
//抽象產品類a
public inte***ce abstractproducta
//抽象產品類b
public inte***ce abstractproductb
//具體產品類prodcuta1
public class producta1 implements abstractproducta
}//具體產品類prodcuta2
public class producta2 implements abstractproducta
}//具體產品類productb1
public class productb1 implements abstractproductb
} //具體產品類productb2
public class productb2 implements abstractproductb
}//具體工廠類1
public class concretefactory1 implements abstractfactory
public abstractproductb createproductb()
}//具體工廠類2
public class concretefactory2 implements creator
public abstractproductb createproductb()
}
Java三種工廠設計模式
乙個栗子 我喜歡吃麵條,抽象 乙個麵條基類 介面也可以 這是產品的抽象類。public abstract class inoodles 程式設計師加班必備也要吃泡麵 具體的產品類 public class paonoodles extends inoodles還有我最愛吃的家鄉的幹扣面 具體的產品類...
JAVA工廠設計模式三種形式
工廠模式 主要用來例項化有共同介面的類,工廠模式可以動態決定應該例項化那乙個類。工廠模式的形態 工廠模式主要用一下幾種形態 1 簡單工廠 2 工廠方法 3 抽象工廠 簡單工廠 又叫靜態工廠 是工廠模式三中狀態中結構最為簡單的。主要有乙個靜態方法,用來接受引數,並根據引數來決定返回實現同一介面的不同類...
java設計模式 三種工廠模式之間的區別
簡單工廠,工廠方法,抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽取了出來,優化了系統的架構,並且增強了系統的擴充套件性。本文是本人對這三種模式學習後的乙個小結以及對他們之間的區別的理解。簡單工廠 簡單工廠模式的工廠類一般是使用靜態方法,通過接收的引數的不同來返回不...