工廠方法模式適用於“大量的產品需要頻繁創建,並且具有同樣的接口時使用”。
一、普通工廠模式 對於實現了同一個接口的一些類進行統一實例的創建,把這個統一創建的工作交給一個類來實現,這個類就叫做工廠類。
Job接口 (定義了要做的事情)
1 public interface Job { 2 public void say(); 3 } View CodeReadJob實現類,實現Job接口,實現Job接口定義的方法:
1 public class ReadJob implements Job { 2 @Override 3 public void say() { 4 System.out.println("This is read Job"); 5 } 6 } View CodeWriteJob實現類,實現Job接口,實現Job接口定義的方法:
1 public class WriteJob implements Job { 2 @Override 3 public void say() { 4 System.out.println("This is write Job"); 5 } 6 } View Code普通工廠通過共有方法傳遞參數的形式獲取返回的實例,如
1 public class SimpleJobFactory { 2 public static final String READ="read"; 3 public static final String WRITE="write"; 4 public Job produce(String type) 5 { 6 if(READ.equalsIgnoreCase(type)) 7 { 8 return new ReadJob(); 9 }else if(WRITE.equalsIgnoreCase(type)) 10 { 11 return new WriteJob(); 12 }else 13 { 14 System.out.println("Parameter type error,can not create object"); 15 return null; 16 } 17 } 18 } View Code測試用例:根據參數生成具有統一接口的兩個對象實例
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