Article View: pl.comp.lang.delphi
Article #334908Re: Druga Instancja Interfejsu
From: konsul41
Date: Tue, 24 Jan 2012 09:44
Date: Tue, 24 Jan 2012 09:44
50 lines
2935 bytes
2935 bytes
Tytułem wstępu
Główne założenie jest takie aby program nie wiedział nic o zawartości klas
implementujących interfejsy znajdujących się w dll.
Interfejsy są tworzone w dll a program w zasadzie nic nie wie o klasie
implementującej interfejs.
Interfejs tylko obrabia dane nie przechowuje ich.
Przed każdą operają interfejs ma przydzielany wskaźnik na dane i dopiero je
obrabia.
Nie ma problemu gdy mam tylko obrobić jednorazowo dane i dalej następne.
Niestety problem gdy dane muszą "współpracować" ze sobą -> Jedne dane muszą
"powiadomić" inne o swojej zmianie itd.
>> CONST NazwaObiektu = 'Etykieta1';
>>
>> procedure CIPitDraw(out Obiekt: IPitDraw; out ObiektName : String);
>> begin
>> Obiekt:=TEtykieta1.Create;
>> ObiektName:=NazwaObiektu;
>> end;
> Po co Ci osobne ObiektName (poza tym - łat a kul name, takie
> ingliszpolskie :D)?
Nawyki amatora.
> Pewnie, żeby używać w TDictionary - tak?
Nie wzorzec obserwator i problemy z jego implementacją.
> Skoro tak, to dlaczego nie trzymasz ObiektName w IPitDraw??
Nie, mam TDictionary i to jest główna lista interfejsów.
W IPITDraw jest ObiektName dziedziczący w wyzszego interfejsu.
Ten ObiektName w dll jest tylko po to aby podczas wczytywania dll wiedzieć
jaki obiekt obsługuje wtyczka/dll bez tworzenia interfejsu.
> A dlaczego nie dodasz metody fabrykującej instancję do interfejsu?
> IPitDraw = interface(IObiekt)
> ['{E4FE2E92-7B11-4ABB-BBA6-FBA87BA11387}']
> function CreateInstance : IObiekt;
> end;
> Wtedy każda instancja interjsu może tworzyć nowe instancje samego siebie.
>
> Albo, możesz utworzyć interfejs fabryki który będzie fabrykował
> interfejsy...
> Czyli oddelegować fabrykowanie do osobnego insterfejsu - Twoja procedura
> CIPitDraw jest taką fabryką.
Dzięki dodałem do interfejsu
procedure CreateInstance(out Obiekt: IPitEdit; Out ObiektName : String);
i działa tak jak chciałem.
Technical Details
Message-ID:
<4f1e7d8d$0$1265$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<4f1e676c$0$1226$65785112@news.neostrada.pl> <jflqud$3o1$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail From: <konsul41@wp.pl> Newsgroups: pl.comp.lang.delphi References: <4f1e676c$0$1226$65785112@news.neostrada.pl> <jflqud$3o1$1@inews.gazeta.pl> Subject: Re: Druga Instancja Interfejsu Date: Tue, 24 Jan 2012 10:44:47 +0100 MIME-Version: 1.0 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.5931 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157 Lines: 52 Message-ID: <4f1e7d8d$0$1265$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 178.42.204.87 X-Trace: 1327398286 unt-rea-a-02.news.neostrada.pl 1265 178.42.204.87:2974 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit