Версия stati c является строго более мощной и более простой в использовании.
Версия stati c требует только, чтобы S
имела функцию-член execute
, тогда как динамическая c версия налагает на пользователя наследование от Strategy
.
Версия stati c не предъявляет никаких требований к стратегии выделения или времени жизни, тогда как в фрагменте версия Dynami c требует выделения кучи. Альтернатива версии Dynami c возможна без выделения, если она не становится владельцем, и в этом случае клиент должен быть обеспокоен временем жизни Strategy
.
Учитывая версию STATI c, a клиент, который хочет выделить кучу, может стереть тип стратегии, чтобы иметь выделение кучи с одним типом стратегии. Но, учитывая приведенную выше версию dynamici c, клиент не может отменить требование выделения кучи.
Версия stati c полностью видна компилятору, и эта информация доступна для оптимизации. Версия Dynami c косвенно обращается к базовому классу Strategy
, поэтому встраивание невозможно, если компилятор не сможет доказать (или предположить) конкретный класс Strategy
, который используется.