Как разрабатывать приложения для смартфонов и ПК - PullRequest
0 голосов
/ 31 октября 2011

Я пишу приложение для Android, но я планирую построить это и для ПК. Поэтому я хочу использовать как можно больше кода. Но в некоторых случаях мне приходится использовать функции, специфичные для платформы. Например для регистрации-вывода и загрузки ресурсов. Я ищу простое решение для абстрагирования этих функций. Мое текущее решение состоит в том, что я написал этот класс

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 наследовать от него. Таким образом, очень мало изменений, и использование log-методов все еще легко. Но я думаю, что поддерживать код и быть довольно жестким. Есть ли лучшие решения для этого?

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

Я думаю, что интерфейс будет работать лучше.

Взгляните на этот код:

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 голосов
/ 31 октября 2011

композиция Favor over Inheritance . Используйте Inversion of Control и шаблон стратегии для горячей замены экземпляра Logger. Для наглядного примера см. об этом в связанной концепции toString () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...