<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    使用Factory Method模式 (引用lhbdir )

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

    讓我們看一個例子。

    每個程序要有一種報錯的方式。看看下面的接口:代碼清單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 );

    }

    假設寫了兩個實現(xiàn)。一個實現(xiàn)(代碼清單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 ...

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

    代碼清單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

    主站蜘蛛池模板: 国产精品免费久久| 亚洲av无码一区二区三区在线播放 | 免费视频爱爱太爽了| 亚洲国产精品无码久久一线| www在线观看免费视频| 久久精品国产亚洲5555| 一个人看的www在线免费视频| 亚洲国产高清在线一区二区三区| 看免费毛片天天看| 免费v片视频在线观看视频| 窝窝影视午夜看片免费| 国产性爱在线观看亚洲黄色一级片 | 久久精品国产亚洲Aⅴ香蕉| 国产免费福利体检区久久| 中文字幕精品亚洲无线码二区 | 亚洲免费中文字幕| 国产在线国偷精品产拍免费| a级午夜毛片免费一区二区| 久久国产亚洲精品麻豆| 美丽姑娘免费观看在线观看中文版 | 在线免费不卡视频| 特级aaaaaaaaa毛片免费视频| 亚洲国产成人乱码精品女人久久久不卡 | 午夜不卡久久精品无码免费| 亚洲欧洲精品国产区| 18禁免费无码无遮挡不卡网站| 亚洲日韩亚洲另类激情文学| 国产免费人视频在线观看免费| 亚洲一级片免费看| 亚洲国产女人aaa毛片在线| 美女视频黄的全免费视频网站| 亚洲国产精品成人午夜在线观看 | 亚洲无人区午夜福利码高清完整版| 亚洲人妖女同在线播放| 国产色爽女小说免费看| 中文字幕在线视频免费观看| 亚洲第一福利视频| 免费黄色小视频网站| 99精品视频在线观看免费| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 亚洲精品乱码久久久久久久久久久久 |