Где мы должны использовать Шаблонный Метод - шаблон?

Я пишу довольно мало ассемблерного кода Коры-A8 ARM. ЦП на iPhone является ARM11 (afaik), таким образом, базовая система команд является тем же.

, Что точно Вы ищете? Я мог дать Вам некоторые примеры, если Вы хотите.

<час>

РЕДАКТИРОВАНИЕ:

я просто узнал, что на iPhone необходимо использовать llvm-gcc компилятор. Насколько я знаю, что это должно понять встроенный ассемблерный синтаксис от GCC. Раз так встроенные ассемблерные учебные руководства всего ARM будут работать над iPhone также.

Вот очень минимальная встроенная ассемблерная функция (в C). Вы могли сказать мне, если это компилирует и работает над iPhone? Если это работает, я могу разглагольствовать немного, как сделать, полезный материал в ARM встраивает ассемблер, специально для архитектуры ARMv6 и расширений DSP.

inline int saturate_to_255 (int a)
{
  int y;
  asm ("usat %0, #8, %1\n\t" : "=r"(y) : "r"(a));
  return y;
}

должно быть эквивалентно:

inline int saturate_to_255 (int a)
{
  if (a < 0) a =0;
  if (a > 255) a = 255;
  return a;
}
8
задан Dave Schweisguth 13 February 2016 в 16:19
поделиться

3 ответа

Шаблон метода шаблона обеспечивает каркас для выполнения любого вида алгоритма или операции и позволяет подклассам повторно определять часть логики.

Плюсы: Естественно подходит для создания фреймворков, так что родительские классы фреймворков могут выполнять обратные вызовы в методы, реализованные в дочерних.

Примеры:

  • java.util.AbstractList
  • DoGet и doPost методы сервлета
  • MDB onMessage method
  • Struts Action class
  • Классы доступа к данным Spring

Минусы: ограничивает вас одним наследованием в Java.

8
ответ дан 5 December 2019 в 06:38
поделиться

Я использовал шаблонный метод для Business Logic, в котором несколько компонентов использовали один и тот же процесс, но реализация была немного другой.

1
ответ дан 5 December 2019 в 06:38
поделиться

Применение шаблона Template Method имеет две основные характеристики:

  1. Есть базовый класс (в Java - один, только с защищенными конструкторами и по желанию объявленный как abstract), который будет подклассифицирован в клиентском коде.
  2. В базовом классе определены две группы методов: a) один или несколько шаблонных методов (обычно только один) и один или несколько методов примитивных операций (обычно более одного). Каждый шаблонный метод представляет собой операцию высокого уровня, реализованную в самом базовом классе в терминах примитивных операций, которые должны быть реализованы/переопределены в каждом конкретном подклассе. Обычно метод шаблона является публичным и непереопределяемым (final, в Java); его документация API должна точно указывать, какие методы примитивных операций он вызывает и когда (то есть, он должен описывать "алгоритм"). Метод примитивной операции, который представляет собой шаг в алгоритме, должен быть непубличным, но переопределяемым (protected, в Java), и может быть двух типов: а) абстрактный метод, который должен быть реализован в подклассе; б) метод с реализацией по умолчанию/пустой, который может быть переопределен в подклассе.

Одним из хороших примеров в Java 6 SDK является метод execute() класса javax.swing.SwingWorker (это public final void метод). В данном случае примитивными методами работы являются doInBackground(), process(List) и done(). Первый является абстрактным и поэтому требует реализации в подклассе; он вызывается шаблонным методом в фоновом потоке. Два других имеют пустые реализации и могут быть переопределены в подклассе; они вызываются во время и в конце обработки, соответственно, в EDT (Swing Event Dispatch Thread), чтобы позволить обновления пользовательского интерфейса.

В своем собственном опыте я иногда использовал этот паттерн. Одним из таких случаев был базовый класс Java, реализующий интерфейс java.util.Iterator, где next() был шаблонным методом, и был только один метод примитивной операции, отвечающий за инстанцирование конкретного класса доменной сущности (это должно было использоваться при итерации по списку постоянных объектов доменной сущности, используя JDBC). Лучшим примером в том же приложении был базовый класс, где метод шаблона реализовывал многошаговый алгоритм, предназначенный для заполнения "экрана обслуживания бизнес-сущностей" (используя Swing) из заданного списка постоянных сущностей; методы примитивных операций вызывались для 1) очистки текущего состояния экрана и 2) добавления сущности в табличное представление внутри экрана; опционально из метода шаблона вызывались другие примитивные операции, если экран был редактируемым.

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

6
ответ дан 5 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: