標籤:Factory 方法模式 factory method java原始碼 建立型設計模式 gof設計模式
一、描述
基於簡單原廠模式中將所有類的建立和初始化放在一個工廠類中出現的問題,我們引進了Factory 方法模式,該模式是GoF總結的23種設計模式的第一種,這個設計模式將一個工廠類拆分成多個具體的工廠類,每個具體的工廠類負責相應的類的對象的建立。
在Factory 方法模式中,抽象工廠類負責定義建立對象的介面,具體對象的建立由實現該抽象工廠的具體工廠類來完成,它由四部分組成:抽象工廠類、實現抽象工廠類的具體工廠類、抽象類別、實現抽象類別的具體類。
二、Factory 方法模式的優缺點
優點:在Factory 方法模式中,建立對象的任務由具體的工廠類負責,一個具體類對應一個具體的工廠類,再由抽象工廠類定義所有具體工廠類建立對象的統一介面,用戶端只負責調用具體類建立對應的對象。
如果有一個新的產品加入,那麼只需要增加一個具體類和建立這個具體類的工廠類即可,不需要修改原來已有的代碼,同一個類的代碼量也不會變大,更利於後期的維護,增強了系統的可擴充性。
缺點:每新加一個產品就要增加兩個類,需要額外地編寫代碼,增加了工作量。
三、原始碼
1、抽象方法類:
package tong.day4_30.factoryMethod;/** *抽象工廠介面,在這個介面中定義了一個createSalary()方法,由實現該介面的具體類重寫該方法,分別建立自己類的對象 * @author tong * */public interface Factory {//這是一個公用的抽象方法,用於建立各種類的對象public abstract Salary createSalary();}
2、具體方法類
package tong.day4_30.factoryMethod;/** * 具體的Factory 方法,用於建立特定類的對象 * @author tong * */public class GuangdongSalaryFactory implements Factory {@Overridepublic Salary createSalary() {//返回GuangdongSalary類的對象return new GuangdongSalary();}}
package tong.day4_30.factoryMethod;/** * 具體的Factory 方法,用於建立特定類的對象 * @author tong * */public class ZhejiangSalaryFactory implements Factory {@Overridepublic Salary createSalary() {//返回ZhejiangSalary類的對象return new ZhejiangSalary();}}
3、抽象類別
package tong.day4_30.factoryMethod;/** * 定義一個薪資介面,所有公司的具體薪資計算都實現這個介面,並重寫計算薪資的方法computeSalary() * @author tong * */public interface Salary {public void computeSalary();}
4、具體類
package tong.day4_30.factoryMethod;/** * 廣東分公司的薪資計算類實現了Salary介面,並重寫了該介面中的計算薪資的方法computeSalary() * @author Administrator * */public class GuangdongSalary implements Salary {@Overridepublic void computeSalary() {System.out.println("廣東分公司薪資計算");}}
package tong.day4_30.factoryMethod;/** * 浙江分公司的薪資計算類實現了Salary介面,並重寫了該介面中的計算薪資的方法computeSalary() * @author Administrator * */public class ZhejiangSalary implements Salary {@Overridepublic void computeSalary() {System.out.println("浙江分公司薪資計算");}}
5、用戶端調用
package tong.day4_30.factoryMethod;/** * 在用戶端調用Factory 方法來建立每個具體的工廠類對象,使用具體工廠類對象來建立不同的薪資對象,由薪資對象調用computeSalary()計算薪資; * 如果還想建立更多的公司薪資,那麼就建立一個相應的薪資類,再建立一個相應的薪資計算的具體工廠類。 * @author tong * */public class Client {public static void main(String[] args) {//建立Factory對象,這裡使用多態,建立不同的具體工廠類對象Factory factory = new GuangdongSalaryFactory();//使用具體的工廠類對象建立不同的薪資對象來計算薪資Salary salary = factory.createSalary();salary.computeSalary();factory = new ZhejiangSalaryFactory();salary = factory.createSalary();salary.computeSalary();}}
java語言實現建立型設計模式—Factory 方法模式