簡單工廠模式讓使用者在使用物件時無需關心物件的建立細節,從而降低系統的耦合度,讓設計方案更易於修改和擴充套件。
1.先用人話講一下什麼是簡單工廠模式
顧客只需要知道香蕉這個名字(僅僅是名字,不是真正的香蕉),水果農場(factory)就能給出香蕉這個水果實體(能吃到嘴的香蕉,product)。
簡單工廠的定義:定義乙個工廠類,它可以根據引數的不同返回不同類的例項,被建立的例項通常都具有相同的父類。
由於建立例項的方法通常都是靜態的,因此簡單工廠模式又被成為靜態工廠方法模式,它是一種類建立型模式。
簡單工廠模式的要點在於,當使用者需要什麼,只需要傳入乙個引數就可以得到對應的物件,不需要知道其中建立的細節。
2.簡單工廠模式結構
1)簡單工廠模式核心是工廠類的設計,包含三個角色。
==1)factory(工廠角色):
^1. 主要負責建立所有產品例項的內部邏輯
^2. 可以被外界直接呼叫,建立所需的產品物件
^3. 提供靜態的工廠方法factorymethod(),返回型別為抽象產品型別product
==2)抽象產品角色:
^1. 它是工廠類建立的所有物件的父類,封裝了不同產品的共有方法
==3)具體產品角色:
^1. 它是最終的建立目標,每個具體產品角色都繼承了抽象產品角色,需要實現在抽象產品中宣告的抽象方法
3.簡單工廠模式的實現
1)抽象產品類
package controller.******factorymodule;
/** *抽象產品
*/public abstract class product
//宣告抽象業務方法
public abstract void methoddiff();
}
2)具體產品類a
package controller.******factorymodule;
public class concreteproducta extends product
}
3)具體產品類b
package controller.******factorymodule;
public class concreteproductb extends product
}
4)工廠類
package controller.******factorymodule;
public class factory else if(args.equals("b"))
return product;}}
5)主類呼叫工廠類
package controller.******factorymodule;
public class client
}
4.建立物件的幾種方法
1)使用new關鍵字直接建立
==1)方便,但是不好。它把對物件的建立和使用放在了一起。如果在需要新增方法就需要改原始碼
2)通過反射機制建立
3)通過轉殖方法建立
4)通過工廠類建立
==1)相比new方法,a類和b類僅僅存在a建立b,或者a使用b,不會同時存在這兩種關係
==2)防止用來例項化乙個類的資料和**在多個類中到處使用
==3)乙個類可以有多個建構函式,滿足不同的情況
5.簡單工廠模式的簡化
可以將抽象產品類和工廠類合併,將靜態工廠方法移到抽象產品類中
6.簡單工廠模式的優缺點
優:1)實現物件建立和使用的分離
2)對於使用者更友好
3)引入配置檔案,可以不用修改**更新產品類
缺:1)工廠類職責過重,一旦不能正常工作,整個系統都要受到影響
2)會增加類的數量,增加系統複雜度
3)一旦新增新產品,就需要修改工廠邏輯,不利於維護和拓展
4)因為使用靜態工廠方法,導致無法形成基於繼承的等級結構
7.簡單工廠模式的試用環境
1)建立物件較少
2)客戶端只知道傳入工廠類的引數嗎,不關心如何建立物件
1 簡單工廠模式
工廠類61 到底要例項化誰,將來會不會增加例項化的物件,比如增加開跟運算,這是很容易變化的地方,62 應該考慮用乙個單獨的類來做這個創造例項的過程,這就是工廠 63template class t 64class operationfactory 6574 else if operate 75 78...
1 簡單工廠模式
一 做乙個商場收銀軟體 二 code using system namespace web.策略模式 正常收費子類 class cashnoraml cashsuper 打折收費子類 public class cashrebate cashsuper 返回折扣 原價 public override ...
1 簡單工廠模式
簡單工廠模式 factory pattern 又稱為靜態工廠方法 static factory method 模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。當我們需要使用乙個物件時,...