Каково точное определение шаблона разработки стратегии?

Решить:

    SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(new SensorEventListener()
    {
        int orientation = -1;

        @Override
        public void onSensorChanged(SensorEvent event)
        {
            if (event.values[1] < 6.5 && event.values[1] > -6.5)
            {
                if (orientation != 1)
                {
                    Log.d("SensorLog", "Landscape");
                }
                orientation = 1;
            }
            else
            {
                if (orientation != 0)
                {
                    Log.d("SensorLog", "Portrait");
                }
                orientation = 0;
            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy)
        {
            // TODO Auto-generated method stub

        }
    }, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
6
задан jaco0646 4 December 2018 в 16:07
поделиться

9 ответов

Сэр корректен и Ваш коллега, необходимо считать GoF.

"Стратегическая модель позволяет алгоритмам варьироваться независимо от клиентов, которые используют их".

См.:

http://www.dofactory.com/Patterns/PatternStrategy.aspx

11
ответ дан 8 December 2019 в 02:46
поделиться

Технически, стратегии могут сделать то, что они хотят.

Только, когда "внешний контекст" диктует некоторое фиксированное и повторяемое поведение, не может быть получен в программатическом интерфейсе (назовите их "желательными свойствами"), что необходимо заботиться, что стратегии действительно substitutable а-ля Liskov относительно этих желательных свойств.

6
ответ дан 8 December 2019 в 02:46
поделиться

Я поддерживаю Ваше мнение. Различные стратегии могут сделать совсем другие вещи, пока они могут использоваться в том же контексте.

Например, если Вы хотите посетить каждый узел в дереве, действительные стратегии могли бы быть:

  • Глубины сначала ищут предзаказ
  • Постпорядок DFS
  • BFS
  • рандомизированный
  • ...

Все стратегии посетили бы узлы в другом порядке, все же цель (посещающий каждый узел) будет тем же. Таким образом, если порядок не имеет значения, любая стратегия соответствует Вашим потребностям.

4
ответ дан 8 December 2019 в 02:46
поделиться

FWIW, статья Wikipedia соглашается с Вами и никогда не слышала о ее положении.

3
ответ дан 8 December 2019 в 02:46
поделиться

Вы. Точка стратегии должна заменить алгоритмом. Поставляют ли они, тем же результатом является побочный продукт желаемого поведения.

2
ответ дан 8 December 2019 в 02:46
поделиться

Согласно "Главным первым Шаблонам разработки" (см. здесь), страница 24

"Стратегическая модель определяет семейство алгоритмов,
инкапсулирует каждого и делает их взаимозаменяемыми.
Стратегия позволяет алгоритму варьироваться независимо от
клиенты, которые используют его".

так сэр Вы корректны, по крайней мере, по словам людей, которые определили шаблон, но что они знают.

2
ответ дан 8 December 2019 в 02:46
поделиться

Первые два являются стратегиями. Becuase для любого входа они дадут Вам тот же самый ответ. последний не. Просто becuase, это дает Вам интервал, не делает это стратегией. Они должны СДЕЛАТЬ то же самое.

Они должны сделать то же самое, но это не означает, что они дают тот же самый результат. Примером мотивации от GoF является один из различных алгоритмов макета или различных алгоритмов назначения регистра. Стратегии имеют ту же цель - блоки макета текста и изображений на странице или присвоения виртуальных регистров к аппаратным регистрам - но они не должны создавать точно тот же результат.

Таким образом, если цель Strategy в Вашем примере должен сделать любую арифметику с входом, затем каждым примером является стратегия той цели. Если цель состояла в том, чтобы суммировать массив, это передается, DoArithmatic был бы назван CalculateSum, и заключительному примеру не удалось бы соответствовать контракту стратегии и тем самым нарушить LSP.

3
ответ дан 8 December 2019 в 02:46
поделиться

Я также должен согласиться. Хорошим примером была бы стратегия калькулятора оценки. У Вас могли быть различные стратегии вычисления заключительной суммы счета в зависимости от нескольких переменных как количество объектов, тип клиента, поставка места назначения, и т.д. Каждая из тех стратегий, как определенно ожидали бы, возвратит различный результат, и это будут все еще считать Стратегической моделью.

0
ответ дан 8 December 2019 в 02:46
поделиться

Я думаю, что это было бы более корректно, чтобы сказать, что вопрос того, должны ли стратегии быть детерминировано идентичными, выходит за рамки определения стратегической модели.

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

Обычно дело обстоит не так. Давайте рассмотрим пример, который, кажется, требует детерминированной эквивалентности: сортировка. Вы могли бы думать, что, если двум реализациям компаратора не удается возвратить тот же результат для тех же исходных данных затем, по крайней мере один из них должен быть дефектным, но это не обязательно имеет место.

Порядки сортировки варьируются между странами. Некоторый диакритический знак нечувствительно вида мест. Некоторые помещают McDuck с MacDuck и т.д. Это стратегии, это - идеальное приложение стратегической модели, и стратегии несомненно не детерминировано эквивалентны.

Вы побеждаете.

2
ответ дан 8 December 2019 в 02:46
поделиться