【问题标题】:How develop Applications for Smartphones and PC如何为智能手机和 PC 开发应用程序
【发布时间】:2011-10-31 18:35:16
【问题描述】:

我正在为 android 编写一个应用程序,但我也计划为 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");

为了编写 pc 应用程序,我使用相同的方法编写了另一个日志类,并让 Logger 从该类继承。 所以几乎不需要做任何改变,并且使用日志方法仍然很容易。但我认为维护代码并且相当严厉。 有没有更好的解决方案?

【问题讨论】:

    标签: java android oop version-control


    【解决方案1】:

    我认为界面会更好。

    看看这段代码:

    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();
    

    这段代码让它没有任何区别。 这就是你的问题的意思吗?

    【讨论】:

    • +1,但请不要称它为 ILogger。我还将删除“标记”部分,并将其作为大多数 Java 日志实现所做的日志工厂调用的一部分,并将该部分从主线代码中取出。
    • 我实际上从未在 PC 上使用过任何类型的日志记录,所以我不确定它是如何进行的。
    • 感谢您的回答!我想过这样的解决方案,但我认为它并不能消除缺点。此外,我不想创建一个类,因为可以以静态方式访问 Android Log 实例,我想保留它
    【解决方案2】:

    Favor Composition over Inheritance。使用 Inversion of ControlStrategy Pattern 热交换 Logger 实例。有关启发性示例,请参阅this on the related concept of toString()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多