使用Factory Method模式 (引用lhbdir )

          Posted on 2007-11-15 23:05 yukui 閱讀(101) 評論(0)  編輯  收藏 所屬分類: 技術
          A: Factory method(工廠方法)只不過是實例化對象的一種方法的名稱。就象工廠一樣,Factory method的任務是創建--或制造--對象。

          讓我們看一個例子。

          每個程序要有一種報錯的方式。看看下面的接口:代碼清單1
          public interface Trace {

                // turn on and off debugging
                public void setDebug( boolean debug );

                // write out a debug message
                public void debug( String message );

                // write out an error message
                public void error( String message );

          }

          假設寫了兩個實現。一個實現(代碼清單3)將信息寫到命令行,另一個(代碼清單2)則寫到文件中。

          代碼清單2
          public class FileTrace implements Trace {
                   
                private java.io.PrintWriter pw;
                private boolean debug;

                public FileTrace() throws java.io.IOException {
                      // a real FileTrace would need to obtain the filename somewhere
                      // for the example I'll hardcode it
                      pw = new java.io.PrintWriter( new java.io.FileWriter( "c:\trace.log" ) );
                }

                public void setDebug( boolean debug ) {
                      this.debug = debug;
                }

                public void debug( String message ) {
                      if( debug ) {  // only print if debug is true
                            pw.println( "DEBUG: " + message );
                            pw.flush();
                      }
                }
                public void error( String message ) {
                      // always print out errors
                      pw.println( "ERROR: " + message );
                      pw.flush();
                }

          }

          代碼清單3
          public class SystemTrace implements Trace {

                private boolean debug;

                public void setDebug( boolean debug ) {
                      this.debug = debug;
                }

                public void debug( String message ) {
                      if( debug ) {  // only print if debug is true
                            System.out.println( "DEBUG: " + message );
                      }
                }
                public void error( String message ) {
                      // always print out errors
                      System.out.println( "ERROR: " + message );
                }

          }

          要使用這兩個類中的任一個,需要這樣做:

          代碼清單4
          //... some code ...
          SystemTrace log = new SystemTrace();
          //... code ...
          log.debug( "entering loog" );
          // ... etc ...

          現在,如果想改變程序中用到的 "Trace實現",就需要修改實例化 "Trace實現" 的每個類。使用了Trace的類的數量可能很多,這種修改就需要大量的工作。而且,你一定也想盡可能地避免大量修改你的類。

          代碼清單5
          public class TraceFactory {
                public static Trace getTrace() {
                      return new SystemTrace();
                }
          }

          getTrace()是一個Factory method。這樣,無論什么時候你想得到一個Trace的引用,只用簡單地調用TraceFactory.getTrace():

          代碼清單6
          //... some code ...
          Trace log = new TraceFactory.getTrace(); 

          posts - 131, comments - 12, trackbacks - 0, articles - 32

          Copyright © yukui

          主站蜘蛛池模板: 体育| 汽车| 革吉县| 鱼台县| 乃东县| 商城县| 收藏| 页游| 资中县| 北海市| 江北区| 岳阳县| 绍兴县| 伊金霍洛旗| 六枝特区| 澄江县| 新丰县| 宁安市| 永宁县| 中方县| 区。| 北碚区| 昌吉市| 马尔康县| 广灵县| 嘉黎县| 离岛区| 嫩江县| 洪江市| 满城县| 衡南县| 隆昌县| 山丹县| 台北县| 长治市| 荃湾区| 黔西县| 德阳市| 抚州市| 云和县| 中西区|