Objektovo Orientované VBA: Návrhové Vzory: Jedináčik [Singleton]
Singleton Design Pattern: keď chcete, aby v ktoromkoľvek okamihu existovala iba jedna inštancia triedy. Singleton je možno najjednoduchší vzor na implementáciu vo VBA a na to stačí vykonať nasledujúce kroky:
- Vyhláste statickú premennú rovnakého typu ako objekt, ktorý chcete, aby bol singleton;
- Pokiaľ ide o vytvorenie inštancie objektu, vykonajte kontrolu statickej premennej. Ak to na nič neukazuje – tj. Is Nothing – potom vytvorte inštanciu a po vytvorení nasmerujte statickú premennú na inštanciu. Ak statická premenná na niečo ukazuje, vyvolajte výnimku, ktorá označí, že nemôžete vytvoriť ďalšiu inštanciu triedy, kým už jedna existuje.
to je všetko. Je to naozaj takmer triviálne. Zvážte jednoduchú továreň:
Private Singleton As Object
Public Function Instantiate(ByRef className As String) As Object
Select className
Case "Dog"
If Singleton Is Nothing then
Set Instantiate = New Dog
Set Singleton = Instantiate
Else
Err.Raise 1 + vbObjectError, "Factory.Instantiate", "Instantiation failed. There already exists an instance of " & className
End If
End Select
End Function
Singleton je tu statická premenná a podmienka If vykonáva kontrolu jej existencie.
to je všetko. Povedal som ti, že je to triviálne. Samozrejme, príklad predpokladá, že používate továreň, a ak nie, kód je viac zapojený. V takom prípade budete musieť tieto kroky implementovať zakaždým, keď chcete vytvoriť inštanciu objektu, čím efektívne duplikujete kód. Mohli by ste to dať do funkcie… ale počkajte, znova si prečítajte môj blog o Simple Factory, pričom venujte osobitnú pozornosť časti, v ktorej uvádzam, že továreň je skutočne len funkcia. V každom prípade sa ho však rozhodnete implementovať. Som si istý, že budete súhlasiť s tým, že implementácia Singletonu vo VBA nie je náročná.