工廠方法模式適用於“大量的產品需要頻繁創建,並且具有同樣的接口時使用”。
一、普通工廠模式 對於實現了同一個接口的一些類進行統一實例的創建,把這個統一創建的工作交給一個類來實現,這個類就叫做工廠類。
Job接口 (定義了要做的事情)

ReadJob實現類,實現Job接口,實現Job接口定義的方法:

WriteJob實現類,實現Job接口,實現Job接口定義的方法:

普通工廠通過共有方法傳遞參數的形式獲取返回的實例,如

測試用例:根據參數生成具有統一接口的兩個對象實例
1 public class SimpleJobFactoryTest {
2 public static void main(String[] args) {
3 SimpleJobFactory factory=new SimpleJobFactory();
4 Job job1=factory.produce(SimpleJobFactory.READ);
5 job1.say();
6 Job job2=factory.produce(SimpleJobFactory.WRITE);
7 job2.say();
8 }
9 }
測試輸出:
1 This is read Job 2 This is write Job
二、多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字符串出錯,則不能正確創建對象,而多個工廠方法模式是提供多個工廠方法,分別創建對象。
1 public class MethodsJobFactory {
2 public Job produceReadJob(){
3 return new ReadJob();
4 }
5 public Job produceWriteJob(){
6 return new WriteJob();
7 }
8 }
測試代碼:
1 public class MethodsJobFactoryTest {
2 public static void main(String[] args) {
3 MethodsJobFactory factory=new MethodsJobFactory();
4 Job job1=factory.produceReadJob();
5 Job job2=factory.produceWriteJob();
6 job1.say();
7 job2.say();
8 }
9 }
測試結果:
1 1 This is read Job 2 2 This is write Job
三、靜態工廠方法模式,將上面的多個工廠方法模式裡的方法置為靜態的,不需要創建實例,直接調用即可。
public class MethodsJobStaticFactory {
public static Job produceReadJob(){
return new ReadJob();
}
public static Job produceWriteJob(){
return new WriteJob();
}
}
測試代碼:
1 public class MethodsJobStaticFactoryTest {
2 public static void main(String[] args) {
3 Job job1=MethodsJobStaticFactory.produceReadJob();
4 Job job2=MethodsJobStaticFactory.produceWriteJob();
5 job1.say();
6 job2.say();
7 }
8 }
測試結果:
1 This is read Job 2 This is write Job
通常使用的靜態工廠的使用方法比較好,普通工廠模式和多個工廠方法模式都不太好用。
下一篇對抽象工廠模式進行學習。
2016-07-27 22:02:40