Entonces Magento ofrece 2 formas de declarar un observador. Singleton y Model (nueva instancia) especificando la <type>etiqueta en Magento 1.xy especificando el sharedatributo en Magento 2.
Magento 1 forma de hacerlo.
<events>
<event_name>
<observers>
<unique_observer_name>
<type>model|object|singleton|null</type>
<class>class/alias_here</class>
<method>methdNameHere</method>
</unique_observer_name>
</observers>
</event_name>
</events>
Versión de Magento 2:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Entonces, en el caso de Magento 1, si la <type>etiqueta es modelo u objeto, se instanciará la clase con Mage::getModel(). Si está singletono falta, se instancia usando Mage::getSingleton().
En el caso de Magento 2, si sharedes falseasí, la clase se instancia usando $this->_observerFactory->create() (nueva instancia).
si sharedes verdadero, se instancia usando $this->_observerFactory->get()(singleton).
Entre las dos versiones, la idea del observador de eventos es muy similar, pero la mayoría de los observadores en Magento 1 se usan como singletons, porque typefalta la etiqueta y en Magento 2 la mayoría (creo que todos) tienen los observadores shared="false".
Estoy confundido. ¿Cuándo debo usar singletons y cuándo debo usar nuevas instancias para observadores?
La versión de Magento (1 o 2) no es importante aquí.
Un caso de uso simple sería adecuado para cada enfoque (nueva instancia o singleton)
typeetiqueta es lo mismo que <type>singleton</type>. Entonces, ¿cuál es la razón por la que estamos haciendo observadores singletons?
typeatributo en absoluto, por lo que generalmente lo omito ahora.