工廠模式呢有三種,簡單工廠模式,工廠方法模式,抽象工廠模式。基本掌握前兩種就可以了,第三種要慢慢理解,我也是慢慢體會才弄明白的,呵呵,大家應該比我聰明,更容易理解。
簡單工廠模式:
簡單工廠模式就是根據條件產生對象,比如條件為1產生什麼對象,條件為2產生什麼對象。。。嗯,我這裡沒有這麼做,為了方便起見就打印了句話。
package org.javaer.pattern.factory;
public class SimpleFactory {
//這裡就用到了singleton單例模式
private static SimpleFactory factory = new SimpleFactory();
private SimpleFactory(){}
public static SimpleFactory getInstance(){
return factory;
}
public void factory(int type){
if(type==1){//條件為1,打印KFC雞翅
System.out.println(“KFC’s chicken wing”);
}else if(type==2){//條件為2,打印麥當勞雞翅
System.out.println(“Mcdonald’s chicken wing”);
}else{//其他情況,沒有雞翅
System.out.println(“no chicken wing”);
}
}
public void factory(String type){
if(“KFC”.equals(type)){
System.out.println(“KFC’s chicken wing”);
}else if(“Mcdonald’s”.equals(type)){
System.out.println(“Mcdonald’s chicken wing”);
}else{
System.out.println(“no chicken wing”);
}
}
public static void main(String[] args) {
SimpleFactory simpleFactory = SimpleFactory.getInstance();
simpleFactory.factory(1);
simpleFactory.factory(“Mcdonald’s”);
}
}
——————————————————————————————-簡單工廠模式完
我們就可以在配置文件裡配置我們要產生的對象的全名就可以了,比如erp.cfg.properties 文件中這樣配置org.javaer.erp.dao.DAO=org.javaer.erp.dao.impl.DAOSupport
調用的時候就傳入通過讀取配置文件得到的Properties類,根據key得到value。有這個字符串,那就容易啦,就像你有了數據庫的驅動類的類路徑
就用Class.forName(“classname”).newInstance();得到對象,同理是吧。這樣就可以通過配置來得到提高系統的可維護性,後面你要是替換實現了,就只要
該配置文件好啦,比如org.javaer.erp.dao.DAO=org.javaer.erp.dao.impl.DAOImpl,那麼系統用到這個的時候就會自動全部換掉,而不用一個一個的更改,
是不是方便多了呢。
工廠方法模式:
工廠方法我就不多說了,就是多態嘛,父類或接口引用不同的子類對象。我這裡用的例子是快餐店生產快餐,有點尴尬了,我不提倡吃快餐的,又貴又沒有營養。不過吃的時候貌似不得以而為之,呵呵,下次堅決不吃。
package org.javaer.pattern.factory;
public class FactoryMethod {
public static void main(String[] args) {
Store store = new KFCStore();
store.makeFood();//KFC賣雞翅
Store store1 = new McdonaldStore();
store1.makeFood();//麥當勞賣漢堡
}
}
//快餐店賣食物
interface Store{
public Food makeFood();
}
//KFC賣快餐(kfc雞翅)
class KFCStore implements Store{
public Food makeFood(){
return new Food(“KFC wing”);
}
}
//Mcdonald賣快餐(Mcdonald漢堡)
class McdonaldStore implements Store{
public Food makeFood(){
return new Food(“Mcdonald’s hamburger”);
}
}
//食物類(雞翅、漢堡)
class Food{
String name = null;
public Food(){}
public Food(String name){
this.name = name;
}
}
如果你要開個必勝客快餐店,寫個類實現Store接口就好了,業務就擴展了。
//必勝客賣食物(披薩)
class Pizzahut implements Store{
public Food makeFood(){
return new Food(“Pizza hut pizza”);
}
}
用的時候就用Store store = new Pizzahut();store.makeFood();
——————————————————————————————————-工廠方法模式完
抽象工廠模式:
抽象工廠呢就是在工廠方法模式上面在包一層,因為你的業務可能還需要根據不同的情況產生不同的工廠。
比如我們要有FoodFactory食物工廠,又要有SoftFactory軟件工廠。。。那我們就在上面加一層用來產生工廠。而工廠又去生產產品(工廠方法)
package org.javaer.pattern.factory;
//抽象工廠
public abstract class AbstractFactory {