2011-10-31 119 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

相关问题