Portanto, o Magento oferece 2 maneiras de declarar um observador. Singleton e Model (nova instância), especificando a <type>tag no Magento 1.xe especificando o sharedatributo no Magento 2.
Magento 1 maneira de fazê-lo.
<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>
Versão Magento 2:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Portanto, no caso do Magento 1, se a <type>tag for modelo ou objeto, a classe será instanciada Mage::getModel(). Se está singletonou está faltando, é instanciado usando Mage::getSingleton().
No caso do Magento 2, se sharedfor false, a classe é instanciada usando $this->_observerFactory->create() (nova instância).
se sharedfor verdade, é instanciado usando $this->_observerFactory->get()(singleton).
Entre as duas versões, a idéia de observador de eventos é muito semelhante, mas a maioria dos observadores no Magento 1 é usada como singletons, porque a typetag está ausente e no Magento 2 a maioria (acho que todos) dos observadores shared="false".
Estou confuso. Quando devo usar singletons e quando devo usar novas instâncias para observadores?
A versão Magento (1 ou 2) não é importante aqui.
Um caso de uso simples serviria para cada abordagem (nova instância ou singleton)
typetag é a mesma coisa que <type>singleton</type>. Então, por que estamos tornando os observadores singletons?
typeatributo, de modo que normalmente eu o pulo agora.