的一個好方法抽象出第三方庫的介紹你需要方法的接口,讓對象創建由工廠完成。特別是在你的情況下,你只需要使用一堆課程,在我看來,這是最好的選擇。我們假設我們需要清理html代碼,並且找到了一個可以爲我們做這件事的kickass庫,但是我們不想堅持這個庫 - 也許有人會在某天將某個超級kickass文件重新發布,我們希望使用。
這可能如下(在Java代碼中)來實現
先在接口定義:
public interface HtmlSanitizer {
String sanitizeHtml(String html);
}
然後,我們創建了我們的接口,基於我們kickass消毒
public class MyKickassHtmlSanitizer implements HtmlSanitizer {
private com.foolib.kickass.html.Sanitizer delegate;
public MyKickassHtmlSanitizer() {
this.delegate= new com.foolib.kickass.html.Sanitizer();
}
public String sanitizeHtml(String html) {
return delegate.kickassSanitizeHtml(html);
}
}
的具體實現
現在製造我們的消毒劑的工廠
public class HtmlSanitizerFactory {
private static final HtmlSanitizerFactory instance = new HtmlSanitizerFactory();
private HtmlSanitizerFactory() {}
public static HtmlSanitizerFactory get() { return instance;}
public HtmlSanitizer getSanitizer() {
return new MyKickassHtmlSanitizer();
}
}
來獲得實例簡單地使用:
HtmlSanitizerFactory.get().getSanitizer();
雖然工廠可以提供靜態方法還是不行,可以是單身或沒有。關於味道和用例的問題。
現在,您對libs kickass sanitizer的依賴減少到一個點,並且改變實現,只需引入一個SuperKickassHtmlSanitizer並讓工廠返回它。
希望對你有所幫助:-)
你能詳細說說一下Mapper嗎?你是指轉換器類嗎? – smack0007 2009-09-17 09:45:10
映射器基本上是將X的類型轉換爲Y類型的東西。因此,在您的場景中,它將在例如您自己的Vector2和XNA Vector2之間進行轉換。 – 2009-09-17 11:20:59
是的......將XNA數據映射到你的結構和背後的東西。 – 2009-09-17 11:42:54