2011-10-31 118 views
0

我正在爲Android編寫應用程序,但我打算爲PC構建此應用程序。所以我想盡可能重複使用儘可能多的代碼。但有些情況下我必須使用特定於平臺的功能。例如,用於記錄輸出和加載資源。 我正在尋找一種簡單的解決方案來抽象這些功能。我目前的解決方案是,我寫了這個類如何開發適用於智能手機和PC的應用程序

public class LoggerAndroid{ 

public static void debug(String tag, String msg) { 
    Log.d(tag, msg); 
} 

public static void error(String tag, String msg) { 
    Log.e(tag, msg); 
} 

public static void info(String tag, String msg) { 
    Log.i(tag, msg); 
} 

public static void warn(String tag, String msg) { 
    Log.w(tag, msg); 
} 

} 

而這一次

public class Logger extends LoggerAndroid{ 

} 

在我的代碼使用表達式像

Logger.info("test", "HelloWorld"); 

以及編寫計算機應用程序,我再寫使用相同的方法記錄類,並讓Logger繼承該類。 因此,做出很少的更改並使用日誌方法仍然很容易。但我認爲維護代碼並且相當強硬。 對此有更好的解決方案嗎?

回答

3

我認爲一個界面會運行得更好。

看看這個代碼:

public interface ILogger { 
    public void debug(String tag, String msg); 

    public void error(String tag, String msg); 

    public void info(String tag, String msg); 

    public void warn(String tag, String msg); 
} 

public class AndroidLogger implements ILogger { 

    @Override 
    public void debug(String tag, String msg) { 
     Log.d(tag, msg); 
    } 

    @Override 
    public void error(String tag, String msg) { 
     Log.e(tag, msg); 
    } 

    @Override 
    public void info(String tag, String msg) { 
     Log.i(tag, msg); 
    } 

    @Override 
    public void warn(String tag, String msg) { 
     Log.w(tag, msg); 
    } 

} 

然後,所有你需要做的是:

ILogger log = new AndroidLogger(); 

,並在Windows,那會是:

ILogger log = new WindowsLogger(); 

這段代碼完全沒有區別。 這是你的意思嗎?

+0

+1,但請不要將它稱爲ILogger。我還會刪除「標記」部分,並將其作爲日誌工廠調用的一部分,因爲大多數Java日誌實現都是這樣做的,並將該部分從主線代碼中取出。 –

+0

我從來沒有使用任何類型的日誌記錄電腦,所以我不知道它是如何去。 – Jong

+0

謝謝你的答覆!我想過這樣的解決方案,但我認爲它並沒有消除這些缺點。此外,我不想創建一個類,因爲Android日誌實例可以以靜態方式訪問,並且我想保留這一點 – Jay

相關問題