隨筆-11  評論-0  文章-0  trackbacks-0

          簡單工廠模式

          簡單工廠模式模式分為三種:

          01、普通

          就是建立一個工廠類,對實現了同一接口的一些類進行實例的創建。首先看下關系圖:

          舉例如下:(我們舉一個發送郵件和短信的例子)

          首先,創建二者的共同接口:

          1. public interface Sender {  
          2.     public void Send();  
          3. }  

          其次,創建實現類:

          1. public class MailSender implements Sender {  
          2.     @Override  
          3.     public void Send() {  
          4.         System.out.println("this is mailsender!");  
          5.     }  
          6. }  
          1. public class SmsSender implements Sender {  
          2.   
          3.     @Override  
          4.     public void Send() {  
          5.         System.out.println("this is sms sender!");  
          6.     }  
          7. }  

          最后,建工廠類:

          1. public class SendFactory {  
          2.   
          3.     public Sender produce(String type) {  
          4.         if ("mail".equals(type)) {  
          5.             return new MailSender();  
          6.         } else if ("sms".equals(type)) {  
          7.             return new SmsSender();  
          8.         } else {  
          9.             System.out.println("請輸入正確的類型!");  
          10.             return null;  
          11.         }  
          12.     }  
          13. }  

          我們來測試下:

          1. public class FactoryTest {  
          2.   
          3.     public static void main(String[] args) {  
          4.         SendFactory factory = new SendFactory();  
          5.         Sender sender = factory.produce("sms");  
          6.         sender.Send();  
          7.     }  
          8. }  

          輸出:this is sms sender!

          02、多個方法

          是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字符串出錯,則不能正確創建對象,而多個工廠方法模式是提供多個工廠方法,分別創建對象。關系圖:

          將上面的代碼做下修改,改動下SendFactory類就行,如下:

          [java] view plaincopypublic class SendFactory {  
             public Sender produceMail(){  
          1.         return new MailSender();  
          2.     }  
          3.       
          4.     public Sender produceSms(){  
          5.         return new SmsSender();  
          6.     }  
          7. }  

          測試類如下:

          1. public class FactoryTest {  
          2.   
          3.     public static void main(String[] args) {  
          4.         SendFactory factory = new SendFactory();  
          5.         Sender sender = factory.produceMail();  
          6.         sender.Send();  
          7.     }  
          8. }  

          輸出:this is mailsender!

          03、多個靜態方法

          將上面的多個工廠方法模式里的方法置為靜態的,不需要創建實例,直接調用即可。

          1. public class SendFactory {  
          2.       
          3.     public static Sender produceMail(){  
          4.         return new MailSender();  
          5.     }  
          6.       
          7.     public static Sender produceSms(){  
          8.         return new SmsSender();  
          9.     }  
          10. }  
          1. public class FactoryTest {  
          2.   
          3.     public static void main(String[] args) {      
          4.         Sender sender = SendFactory.produceMail();  
          5.         sender.Send();  
          6.     }  
          7. }  

          輸出:this is mailsender!

          總體來說,工廠模式適合:凡是出現了大量的產品需要創建,并且具有共同的接口時,可以通過工廠方法模式進行創建。在以上的三種模式中,第一種如果傳入的字符串有誤,不能正確創建對象,第三種相對于第二種,不需要實例化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。

          posted on 2015-07-20 22:05 wxb1988 閱讀(174) 評論(0)  編輯  收藏 所屬分類: Design pattern
          主站蜘蛛池模板: 静乐县| 凯里市| 安新县| 嘉祥县| 崇州市| 南陵县| 墨竹工卡县| 酉阳| 万州区| 银川市| 宁化县| 纳雍县| 岑溪市| 永寿县| 綦江县| 黄梅县| 祁阳县| 沭阳县| 缙云县| 多伦县| 威信县| 天柱县| 浠水县| 达拉特旗| 青龙| 芦山县| 嘉荫县| 玉田县| 达州市| 兴山县| 西畴县| 综艺| 蕉岭县| 年辖:市辖区| 托克逊县| 伊通| 同仁县| 海门市| 武威市| 呼图壁县| 乌兰浩特市|