<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 閱讀(100) 評論(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的引用,只用簡單地調(diào)用TraceFactory.getTrace():

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

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

    Copyright © yukui

    主站蜘蛛池模板: 在线观看免费成人| 破了亲妺妺的处免费视频国产| 久久99亚洲综合精品首页 | 大地资源在线资源免费观看| 又色又污又黄无遮挡的免费视 | 亚洲精品乱码久久久久久自慰| 中国内地毛片免费高清| 日本亚洲成高清一区二区三区 | 亚洲日韩在线第一页| 一级毛片高清免费播放| 亚洲日韩精品一区二区三区无码 | 亚洲综合男人的天堂色婷婷| 中文字幕天天躁日日躁狠狠躁免费| 亚洲第一页在线视频| 日韩吃奶摸下AA片免费观看| 亚洲日韩一区二区一无码| 国产在线观看www鲁啊鲁免费| 人人爽人人爽人人片A免费| 亚洲色婷婷一区二区三区| 四虎国产成人永久精品免费| 亚洲国产成AV人天堂无码| 成年性羞羞视频免费观看无限| 国产亚洲男人的天堂在线观看| 久久久久亚洲AV无码专区网站| 久久精品视频免费播放| 天堂亚洲国产中文在线| 亚洲av午夜成人片精品电影| 中国国产高清免费av片| 亚洲国产模特在线播放| 国产大片免费观看中文字幕| a视频在线免费观看| 亚洲小说区图片区| 四虎永久在线精品免费观看地址| 久久国产美女免费观看精品| 亚洲蜜芽在线精品一区| 国产无遮挡又黄又爽免费视频| 日韩电影免费在线观看| 亚洲爆乳少妇无码激情| 亚洲av无码片在线播放| 成人黄动漫画免费网站视频| 西西人体免费视频|