Подтвердить что ты не робот

Разница между шаблоном стратегии и шаблоном команды

В чем разница между шаблоном и Шаблон команды? Я также ищу некоторые примеры на Java.

4b9b3361

Ответ 1

Как правило, шаблон команды используется для того, чтобы исключить объект из того, что нужно сделать, - выполнить операцию и ее аргументы и завершить их в объекте, который будет регистрироваться, удерживаться для отмены, отправляться на удаленный сайт, и т.д. Будет иметь место большое количество отдельных объектов Command, которые проходят через заданную точку в системе с течением времени, а объекты Command будут содержать различные параметры, описывающие запрошенную операцию.

С другой стороны, шаблон стратегии используется для указания того, как что-то должно быть сделано, и подключается к более крупному объекту или методу для предоставления определенного алгоритма. Стратегия сортировки может быть сортировкой слияния, может быть сортировкой вставки или, возможно, чем-то более сложным, например, только с использованием сортировки слияния, если список больше минимального. Объекты стратегии редко подвергаются такому массовому перетасовке объектов Command, которые часто используются для настройки или настройки.

Оба шаблона включают факторинг кода и, возможно, параметры для отдельных операций из исходного класса, которые содержали их в другом объекте для обеспечения независимой изменчивости. Различия встречаются в практических случаях, встречающихся на практике, и в намерениях позади каждого шаблона.

Ответ 2

Слова уже даны. Вот разница в конкретном коде.

public class ConcreteStrategy implements BaseStrategy {

    @Override
    public void execute(Object argument) {
        // Work with passed-in argument.
    }

}

public class ConcreteCommand implements BaseCommand {

    private Object argument;

    public ConcreteCommand(Object argument) {
        this.argument = argument;
    }

    @Override
    public void execute() {
        // Work with own state.
    }

}

Ответ 3

Стратегия - Quicksort или Mergesort [algo change]

Команда - Открыть или закрыть [изменение действия]

Ответ 4

Стратегический шаблон полезен, когда у вас есть несколько реализаций (алгоритмов) для данной функции, и вы хотите изменить алгоритм во время выполнения в зависимости от типа параметра.

Один хороший пример из HttpServlet code:

service() метод будет направлять запрос пользователя на doGet() или doPost() или какой-либо другой метод в зависимости от типа метода.

protected void service(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
    {
    String method = req.getMethod();

    if (method.equals(METHOD_GET)) {
        long lastModified = getLastModified(req);
        if (lastModified == -1) {
        // servlet doesn't support if-modified-since, no reason
        // to go through further expensive logic
        doGet(req, resp);
        } else {
        long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
        if (ifModifiedSince < (lastModified / 1000 * 1000)) {
            // If the servlet mod time is later, call doGet()
                    // Round down to the nearest second for a proper compare
                    // A ifModifiedSince of -1 will always be less
            maybeSetLastModified(resp, lastModified);
            doGet(req, resp);
        } else {
            resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
        }
        }

    } else if (method.equals(METHOD_HEAD)) {
        long lastModified = getLastModified(req);
        maybeSetLastModified(resp, lastModified);
        doHead(req, resp);

    } else if (method.equals(METHOD_POST)) {
        doPost(req, resp);

    } else if (method.equals(METHOD_PUT)) {
        doPut(req, resp);   

    } else if (method.equals(METHOD_DELETE)) {
        doDelete(req, resp);

    } else if (method.equals(METHOD_OPTIONS)) {
        doOptions(req,resp);

    } else if (method.equals(METHOD_TRACE)) {
        doTrace(req,resp);

    } else {
        //
        // Note that this means NO servlet supports whatever
        // method was requested, anywhere on this server.
        //

        String errMsg = lStrings.getString("http.method_not_implemented");
        Object[] errArgs = new Object[1];
        errArgs[0] = method;
        errMsg = MessageFormat.format(errMsg, errArgs);

        resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
    }
    }

Основные характеристики шаблона стратегии

  • Это образец поведения
  • Он основан на делегировании
  • Он изменяет кишки объекта, изменяя поведение метода
  • Он использовал для переключения между семейством алгоритмов
  • Изменяет поведение объекта во время выполнения

Шаблон команды используется для обеспечения свободной связи между Invoker и Receiver. Команда, ConcreteCommand, Receiver, Invoker и Client являются основными компонентами этого шаблона.

Различные приемники будут выполнять одну и ту же команду с помощью команды Invoker и Concrete, но реализация команды будет различаться в каждом приемнике.

например. Вы должны реализовать функции "On" и "Off" для телевизора и DVDPlayer. Но TV и DVDPlayer будут иметь различную реализацию для этих команд.

Взгляните на приведенные ниже сообщения с примерами кода:

Реальный мир Пример шаблона стратегии

Использование шаблона проектирования команд

Ответ 5

Основное отличие заключается в том, что команда выполняет некоторые действия над объектом. Он может изменить состояние объекта.

В то время как стратегия решает, как обрабатывать объект. Он инкапсулирует некоторую бизнес-логику.