程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 1 設計模式--工廠方法模式,設計模式--工廠模式

1 設計模式--工廠方法模式,設計模式--工廠模式

編輯:JAVA綜合教程

1 設計模式--工廠方法模式,設計模式--工廠模式


  工廠方法模式適用於“大量的產品需要頻繁創建,並且具有同樣的接口時使用”。

一、普通工廠模式   對於實現了同一個接口的一些類進行統一實例的創建,把這個統一創建的工作交給一個類來實現,這個類就叫做工廠類。

     Job接口 (定義了要做的事情)

1 public interface Job { 2 public void say(); 3 } View Code

  ReadJob實現類,實現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 Code

  WriteJob實現類,實現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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved