亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用Factory Method模式

2019-11-18 14:29:03
字體:
來源:轉載
供稿:網友

  Q: 閱讀 "Polymorphism in its purest form" 一文時,我看到了一個不熟悉的術語 "Factory method"。你能解釋一下什么是Factory method并說明如何使用它嗎?

A: Factory method(工廠方法)只不過是實例化對象的一種方法的名稱。就象工廠一樣,Factory method的任務是創建--或制造--對象。

讓我們看一個例子。

每個程序要有一種報錯的方式??纯聪旅娴慕涌冢?br />
代碼清單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: race.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();
//... code ...
log.debug( "entering loog" );
// ... etc ...

使用Factory method來獲得實例可以大量節省以后的工作。上面的代碼中,TraceFactory返回的是SystemTrace實例。假設需求發生了變化,需要將信息寫到文件中。假如是使用Factory method來獲得實例,只用在一個類中修改一次就可以滿足新的需求。你就不用在使用了Trace的的每個類中進行修改了。也就是說,只用簡單地重定義getTrace():

代碼清單7
public class TraceFactory {
public static Trace getTrace() {
try {
return new FileTrace();
} catch ( java.io.IOException ex ) {
Trace t = new SystemTrace();
t.error( "could not instantiate FileTrace: " + ex.getMessage() );
return t;
}
}
}

當不能確定一個類的什么具體實現要被實例化時,Factory method會很有用。你可以將那些細節留給Factory method。

在上面的例子中,你的程序不知道要創建FileTrace還是SystemTrace。因而,你可以只是用Trace來處理對象,對具體實現的實例化則留給Factory method。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕网站| 8x拔播拔播x8国产精品| 深夜福利国产精品| 亚洲欧美日韩在线一区| 成人黄色片在线| 欧美日韩黄色大片| 欧美一区亚洲一区| 日av在线播放中文不卡| 日韩美女在线观看| 韩曰欧美视频免费观看| 久久久久久久爱| 亚洲国产精品电影| 欧美精品videofree1080p| 一区二区三区视频观看| 日韩欧美黄色动漫| 国产精品久久久久9999| 国产91九色视频| 伊人久久久久久久久久久久久| 国产精品男人的天堂| 91亚洲精品在线| 亚洲曰本av电影| 精品色蜜蜜精品视频在线观看| 久久久极品av| 日韩av电影在线播放| 欧美日韩亚洲天堂| 国产精品入口夜色视频大尺度| 国产综合在线观看视频| 国产91精品视频在线观看| 国产丝袜高跟一区| 日本成人免费在线| 久久久亚洲天堂| 国产丝袜一区二区| 国产日韩在线看片| 中文字幕日韩在线播放| 亚洲女人天堂网| 色琪琪综合男人的天堂aⅴ视频| 亚洲欧洲在线免费| 久久久欧美精品| 欧美精品在线视频观看| 91爱爱小视频k| 欧美午夜宅男影院在线观看| 日韩美女视频免费看| 国产精品九九久久久久久久| 日韩视频在线免费观看| 精品亚洲一区二区| 日韩小视频在线观看| 久久久久国产精品免费网站| 91国产一区在线| 欧美日韩中文字幕| 91精品国产91| 日韩av在线直播| 九九九久久国产免费| 欧美激情一级欧美精品| 国产精品夫妻激情| 欧美在线一区二区三区四| 国产欧美日韩91| 日韩欧美成人免费视频| 亚洲精品国产综合区久久久久久久| 国产小视频国产精品| 日韩高清免费在线| 伊人青青综合网站| 亚洲一区二区三区视频播放| 国产成人亚洲综合| 亚洲无线码在线一区观看| 成人做爰www免费看视频网站| 午夜精品久久久久久99热| 亚洲最大福利视频网站| 韩国日本不卡在线| 欧美日韩激情视频| 欧美日韩国产精品一区| 精品久久久国产精品999| 久久久久久亚洲| 日韩精品中文字幕有码专区| 97视频在线观看网址| 亚洲国产精品久久91精品| 国产成人精彩在线视频九色| 91高清视频免费| 午夜精品美女自拍福到在线| 欧美夫妻性生活视频| 国产97色在线|日韩| 中文字幕日韩在线播放| 一区二区三区日韩在线| 亚洲日本欧美日韩高观看| 中文字幕精品一区二区精品| 亚洲欧美另类中文字幕| 大伊人狠狠躁夜夜躁av一区| 欧美日韩国产综合视频在线观看中文| 日韩视频免费大全中文字幕| 欧美老少配视频| 亚洲欧美在线一区| 久久国产精品首页| 青青在线视频一区二区三区| 日韩中文字幕国产精品| 国产精品成人播放| 久久久久久这里只有精品| 成人激情在线观看| 午夜精品福利视频| 国产精品人人做人人爽| 日韩精品在线视频观看| 国产精品一香蕉国产线看观看| 中文欧美日本在线资源| 亚洲国产精品网站| 国产在线精品成人一区二区三区| 午夜精品久久久久久久白皮肤| 色爱av美腿丝袜综合粉嫩av| 国产精品成久久久久三级| 国产成人精品电影| 少妇精69xxtheporn| 亚洲精品小视频在线观看| 亚洲r级在线观看| 精品网站999www| 日本不卡高字幕在线2019| 色一情一乱一区二区| 中文字幕在线视频日韩| 日本aⅴ大伊香蕉精品视频| 精品久久久久久中文字幕一区奶水| 亚洲深夜福利视频| 久久999免费视频| 在线视频亚洲欧美| 国产在线精品成人一区二区三区| 国产视频精品一区二区三区| 国产成+人+综合+亚洲欧洲| 亚洲а∨天堂久久精品喷水| 日韩精品在线观看网站| 亚洲自拍欧美另类| 亚洲一区美女视频在线观看免费| 最近的2019中文字幕免费一页| 免费97视频在线精品国自产拍| 中文精品99久久国产香蕉| 国产91精品最新在线播放| 2018中文字幕一区二区三区| 亚洲а∨天堂久久精品喷水| 亚洲第一二三四五区| 亚洲免费av网址| 欧美激情综合色综合啪啪五月| 欧美专区第一页| 欧美在线亚洲一区| 欧美激情一区二区三级高清视频| 亚洲人成自拍网站| 亚洲国产精品成人va在线观看| 狠狠躁夜夜躁人人躁婷婷91| 国产精品久久久久久久久久新婚| 日韩av在线网址| 日韩av电影手机在线观看| 国产精品第一视频| 亚洲精品99久久久久中文字幕| 欧美专区第一页| 国产精品久久久久久亚洲调教| 国产在线视频91| 中文字幕欧美日韩在线| 国产美女精品免费电影| 57pao成人永久免费视频| 亚洲国产精品成人精品| 国产精品入口尤物| 欧美大肥婆大肥bbbbb| 亚洲美女精品久久| 亚洲黄色免费三级| 日韩精品视频在线播放| 日韩av电影在线网| 神马久久久久久| 亚洲一区av在线播放| 亚洲石原莉奈一区二区在线观看| 亚洲女在线观看| 久热99视频在线观看|