java語言實現創建型設計模式―工廠方法模式
來源:程序員人生 發布時間:2015-08-08 09:04:14 閱讀次數:3272次
1、描寫
基于簡單工廠模式中將所有類的創建和初始化放在1個工廠類中出現的問題,我們引進了工廠方法模式,該模式是GoF總結的23種設計模式的第1種,這個設計模式將1個工廠類拆分成多個具體的工廠類,每一個具體的工廠類負責相應的類的對象的創建。
在工廠方法模式中,抽象工廠類負責定義創建對象的接口,具體對象的創建由實現該抽象工廠的具體工廠類來完成,它由4部份組成:抽象工廠類、實現抽象工廠類的具體工廠類、抽象類、實現抽象類的具體類。
2、工廠方法模式的優缺點
優點:在工廠方法模式中,創建對象的任務由具體的工廠類負責,1個具體類對應1個具體的工廠類,再由抽象工廠類定義所有具體工廠類創建對象的統1接口,客戶端只負責調用具體類創建對應的對象。
如果有1個新的產品加入,那末只需要增加1個具體類和創建這個具體類的工廠類便可,不需要修改原來已有的代碼,同1個類的代碼量也不會變大,更利于后期的保護,增強了系統的可擴大性。
缺點:每新加1個產品就要增加兩個類,需要額外地編寫代碼,增加了工作量。
3、源代碼
1、抽象方法類:
package tong.day4_30.factoryMethod;
/**
*抽象工廠接口,在這個接口中定義了1個createSalary()方法,由實現該接口的具體類重寫該方法,分別創建自己類的對象
* @author tong
*
*/
public interface Factory {
//這是1個公共的抽象方法,用于創建各種類的對象
public abstract Salary createSalary();
}
2、具體方法類
package tong.day4_30.factoryMethod;
/**
* 具體的工廠方法,用于創建特定類的對象
* @author tong
*
*/
public class GuangdongSalaryFactory implements Factory {
@Override
public Salary createSalary() {
//返回GuangdongSalary類的對象
return new GuangdongSalary();
}
}
package tong.day4_30.factoryMethod;
/**
* 具體的工廠方法,用于創建特定類的對象
* @author tong
*
*/
public class ZhejiangSalaryFactory implements Factory {
@Override
public Salary createSalary() {
//返回ZhejiangSalary類的對象
return new ZhejiangSalary();
}
}
3、抽象類
package tong.day4_30.factoryMethod;
/**
* 定義1個薪資接口,所有公司的具體薪資計算都實現這個接口,并重寫計算薪資的方法computeSalary()
* @author tong
*
*/
public interface Salary {
public void computeSalary();
}
4、具體類
package tong.day4_30.factoryMethod;
/**
* 廣東分公司的薪資計算類實現了Salary接口,并重寫了該接口中的計算薪資的方法computeSalary()
* @author Administrator
*
*/
public class GuangdongSalary implements Salary {
@Override
public void computeSalary() {
System.out.println("廣東分公司薪資計算");
}
}
package tong.day4_30.factoryMethod;
/**
* 浙江分公司的薪資計算類實現了Salary接口,并重寫了該接口中的計算薪資的方法computeSalary()
* @author Administrator
*
*/
public class ZhejiangSalary implements Salary {
@Override
public void computeSalary() {
System.out.println("浙江分公司薪資計算");
}
}
5、客戶端調用
package tong.day4_30.factoryMethod;
/**
* 在客戶端調用工廠方法來創建每一個具體的工廠類對象,使用具體工廠類對象來創建不同的薪資對象,由薪資對象調用computeSalary()計算薪資;
* 如果還想創建更多的公司薪資,那末就創建1個相應的薪資類,再創建1個相應的薪資計算的具體工廠類。
* @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();
}
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈