Article View: pl.comp.objects
Article #4754Re: Singleton w VB
From: Marcin Swiatek
Date: Mon, 18 Jan 1999 16:30
Date: Mon, 18 Jan 1999 16:30
54 lines
3331 bytes
3331 bytes
Czesc (Dobry Wieczor?) Oczywiscie, cos takiego da sie zrealizowac. Zastanowilem sie nad tym chwilke i przyszly mi do glowy dwa sposoby. Kazdy implementuje "design pattern" (jak to nazwac po polsku) singleton, ale w zadnym przypadku nie udalo mi sie tego zamknac po prostu w jednej klasie. Taka implementacja jak w przykladach C++ do "Design Patterns" nie jest mozliwa (to znaczy - tak mi sie wydaje). Jako rzeklem, sa dwa sposoby. Jeden - powiedzmy "Singleton zewnetrzny" polega na zdefinitowaniu klasy w odrebnym podprojekcie typu ActivexDLL z Instancing typu 2. To bedzie singleton. Potrzebna bedzie druga klasa, z Instancing typu 6, ktora jak wiadomo na zewnatrz widac jako zbior funkcji modulu i ktora tworzy sie automatycznie. W klasie globalnej robimy funkcje, ktora zwraca singleton, tworzac go w razie potrzeby. Musi oczywiscie przechowywac referencje do jedynej instacji singletona. Problem z tym rozwiazaniem jest taki, ze po pierwsze porzebny jest podprojekt (ale to nie musi byc jego jedyne zastosowanie), po drugie uzywamy jedynej klasy typu GlobalMultiUse (a mozna miec tylko jedna w projekcie) jako class factory, a wcale nie musimy chciec jej do tego uzywac (ale to tez w sumie nie problem). Po trzecie i najwazniejsze programista uzywajacy tego modulu moze sobie utworzyc jawnie nasze "class factory" i singleton przestaje byc singletonem. Drugi metoda umozliwia utworzenie singletona wewnatrz jednego projektu. Potrzebna jest klasa i modul (zwykly). W module deklarujemy funkcje, ktora zwraca singleton (tworzac go w razie potrzeby). Niemoznosc innego utworzenia obiektu zapewniamy sobie przez to, ze w obsludze zdarzenia Initialize musimy sie "dogadac" z modulem, czy obiekt jest tworzony wlasciwie i w razie potrzeby zglosic blad wykonania. Wada tej metody polega na tym, ze musimy miec klase i modul. Poza tym nieuprawnione utworzenie obiektu bedzie wykryte nie podczas kompilacji tylko w czasie wykonania. Pierwsza metoda jest o tyle dobra, ze cos takiego >>Set ref = New Singleton bedzie bledem skladni (Improper use of New). No tak, mam nadzieje, ze to co napisalem, da sie zrozumiec. Jesli nie (wiem, ze jasnosc wywodu nie jest moim atutem) sluze przykladowym projekcikiem - jesli ktokolwiek sobie zyczy. Pozdrawiam Marcin Swiatek PS. Ja wiem, ze zadna z tych metod nie jest szczegolnie elegancka, ale innych nie widze. Zreszta nawet w materialach reklamowych Microsoftu o VB nigdzie nie ma slowa "elegancja". M.
Technical Details
Message-ID:
<36A361B3.38825FB6@sympatico.ca>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!news.icm.edu.pl!uw.edu.pl!not-for-mailReferences:
<016d01be42ba$10fa6c30$0400a8c0@piotrm>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!news.icm.edu.pl!uw.edu.pl!not-for-mail From: Marcin Swiatek <martek@sympatico.ca> Newsgroups: pl.comp.objects Subject: Re: Singleton w VB Date: Mon, 18 Jan 1999 11:30:43 -0500 Organization: Marcin Swiatek Lines: 54 Message-ID: <36A361B3.38825FB6@sympatico.ca> References: <016d01be42ba$10fa6c30$0400a8c0@piotrm> Reply-To: martek@sympatico.ca NNTP-Posting-Host: ppp733.on.bellglobal.com Mime-Version: 1.0 X-Trace: h1.uw.edu.pl 916720674 20654 206.172.238.157 (19 Jan 1999 04:37:54 GMT) X-Complaints-To: usenet@h1.uw.edu.pl NNTP-Posting-Date: 19 Jan 1999 04:37:54 GMT X-Mailer: Mozilla 4.05 [en]C-SYMPA (Win95; I) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit