定義:?定義一個(gè)創(chuàng)建對象的接口,讓其子類自己決定實(shí)例化哪一個(gè)工廠類锡凝,工廠模式使其創(chuàng)建過程延遲到子類進(jìn)行。
產(chǎn)品: public interface Product {
? ? ? ? void show ();
}?
產(chǎn)品1: class Product1 implements Product {
? ? ? ? public void show () {
? ? ? ? ? ? ? ? System.out.println ("創(chuàng)建產(chǎn)品1");
????????}
}
產(chǎn)品2:?class Product2 implements Product {
? ? ? ? public void show () {
????????????????System.out.println ("創(chuàng)建產(chǎn)品2");
????????}
}
生產(chǎn)工廠: public interface CreateFactory {
? ? ? ? Product create();
}
生產(chǎn)工廠實(shí)現(xiàn): class ProductFactory implements??CreateFactory? {
? ? ? ? public Product create(String prdType) {
? ? ? ? ? ? ? ? ?switch(prdType) {
? ? ? ? ? ? ? ? ? ? ? ? case "prd1":
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return new Product1 (); break;
? ? ? ? ? ? ? ? ? ? ? ? case "prd2":
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return new Product2 (); break;
? ? ? ? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return null;
????????????????}
????????}
}
調(diào)用實(shí)例:
public class Test {
? ? ? ? public static void main(String[] args) {
? ??????????????ProductFactory? pf = new?ProductFactory ();
? ? ? ? ? ? ? ? pf.create("prd1");
????????}
}
優(yōu)點(diǎn):1甜熔、一個(gè)調(diào)用者想創(chuàng)建一個(gè)對象仑撞,只要知道其名稱就可以了。 2音比、擴(kuò)展性高俭尖,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠類就可以洞翩。 3稽犁、屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口骚亿。
缺點(diǎn):增加新的產(chǎn)品需要修改工廠實(shí)現(xiàn)類中的switch已亥,違背了開閉原則。類的數(shù)量主鍵增加来屠,提高了系統(tǒng)的復(fù)雜度
與工廠方法的比對: 對象生成的規(guī)則不同虑椎, 工廠方法:工廠-產(chǎn)品為1:1,? 簡單工廠:? 工廠-產(chǎn)品為1:n