<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 閱讀(105) 評論(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

    主站蜘蛛池模板: 亚洲AV成人无码网站| 久久亚洲AV午夜福利精品一区| 亚洲中文字幕久在线| vvvv99日韩精品亚洲| 国产免费av一区二区三区| 国产日产亚洲系列| 亚洲第一成人在线| 午夜毛片不卡免费观看视频| 国产亚洲精品岁国产微拍精品| xvideos永久免费入口| 免费国产作爱视频网站| 亚洲国产精品综合久久久| 国产精品成人啪精品视频免费| 亚洲免费视频一区二区三区| 狠狠色香婷婷久久亚洲精品| 成年人在线免费看视频| 亚洲av永久中文无码精品| 无码成A毛片免费| 亚洲AV网站在线观看| 一级做a毛片免费视频| 国产亚洲av片在线观看16女人 | 三级黄色免费观看| 久久亚洲免费视频| 免费三级毛片电影片| 黄色三级三级三级免费看| 国产亚洲精品自在线观看| 久久午夜羞羞影院免费观看| 亚洲熟伦熟女专区hd高清| 222www免费视频| 亚洲AV无码一区二区三区电影 | 亚洲成综合人影院在院播放| 午夜爱爱免费视频| 久久www免费人成精品香蕉| 91嫩草私人成人亚洲影院| 白白国产永久免费视频| a级毛片免费全部播放无码| 在线观看国产区亚洲一区成人| 99免费在线观看视频| 精品韩国亚洲av无码不卡区 | 五月婷婷综合免费| 青娱乐在线免费观看视频|