引言:工廠用于幫你完成對象的
new
操作,作用一般是:幫你創(chuàng)建對象。一般配合反射來使用。
一、場景
A賣果汁和雪糕,B也賣果汁和雪糕,但是A有自己的店鋪和制作機(jī)器,也可以引進(jìn)各種產(chǎn)品的制作圖譜,讓機(jī)器去生產(chǎn)就好;而B是純手工自己弄,那么,很明顯,A一天能賣出去的東西肯定更多,B效率這么低,就算我們愿意排隊等,B一天也賣不了多少。于是B想要引進(jìn)A的經(jīng)營方式,引進(jìn)機(jī)器。
二、設(shè)計與代碼
- 首先,B定義好自己想要從事的活?!疽a(chǎn)什么】
public abstract class Product { public abstract void msg(); }
- 然后,得買一個什么都能學(xué)會的機(jī)子,給他什么圖譜,他就能生產(chǎn)什么。
好,找到賣機(jī)器的店,看到機(jī)器的模型。
好,最終找到適合自己的生產(chǎn)機(jī)器。【終極版本,直接反射來學(xué)習(xí)各種圖譜】public abstract class Factory { public abstract <T extends Product> T createProduct(Class<T> clazz); }
public class ConcreteFactory extends Factory{ @Override public <T extends Product> T createProduct(Class<T> clazz) { Product product = null; try { product = (Product) Class.forName(clazz.getName()).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { e.printStackTrace(); } return (T) product; } }
- 好了,萬事具備,現(xiàn)在,B想生產(chǎn)果汁(
ProductA
) 和 雪糕(ProductB
),只需要這樣:
public class IceCream extends Product{
@Override
public void msg() {
System.out.println("我是雪糕");
}
}
public class Juice extends Product {
@Override
public void msg() {
System.out.println("我是果汁");
}
}
-
結(jié)果