Verwenden des Ähnlichkeitsmuster-Beobachters in C

Kürzlich erinnerte ich mich, wie ich ein Buch über Design Patterns für Java gelesen habe, und da ich immer noch nicht verstehe, wie dies in OOP aus dem Speicher geschieht, habe ich beschlossen, meine Implementierung in C zu schreiben.

Ich habe beschlossen, in diesem Java-Buch noch einmal nachzusehen, wie dieses Muster implementiert wird. Ich habe das ganze Kapitel durchgesehen, den Code angeschaut, aber nichts war mehr in meinem Kopf. Warum so? ) Ist es richtig, im oop-Stil zu denken? Ich kenne zum Beispiel ein wenig Java und C ++, aber wie bequem ist es, die Implementierung so zu gestalten, dass sie angenehm zu bedienen ist und nicht vergessen wird? Auch für das Experiment habe ich mir angeschaut, wie das in c ++ gemacht wird. Ehrlich gesagt fällt es mir schwer, mir einen solchen Code anzusehen. Ich muss jede Zeile lesen und nachdenken.

Was habe ich also getan, was sich in Zukunft für die Programmierung als nützlich erweisen könnte? Treffen Sie die Implementierung auf Github . Ich möchte die Benutzerfreundlichkeit von dem erklären, was ich geschrieben habe. In dieser Implementierung müssen Sie keine Struktur erstellen, in der Daten gespeichert werden. Die zugrunde liegende Struktur selbst ist hinter den Kulissen. Zum Beispiel möchte ich den TRADE-Verlag in einer Datei abonnieren. Dieser Verlag gibt mir zum Beispiel Produktrabatte. Ich betrachte den Beobachter als eine gewöhnliche Funktion und erkläre sie gemäß der Regel.

void sub_trade ( void *event, void *data ) { /*        . */ } 

Jetzt möchte ich einen Publisher erstellen und Ereignisse abonnieren. In diesem Fall müssen Sie nichts extra anrufen. Es muss lediglich angegeben werden, an welchen Publisher der Abonnent übertragen werden soll.

 enum { TRADE }; init_publisher ( TRADE, sub_trade, NULL ); 

Und alle. Wir haben den Verlag abonniert. Jetzt möchte ich zum Beispiel in einer anderen Datei einen Newsletter im Online-Chat erstellen. Ich weiß nicht, wie bequem es wäre, dies in OOP und noch mehr in Java zu tun, aber mithilfe meiner Implementierung geschieht dies einfach. Übrigens müsste Java wahrscheinlich statische Methoden verwenden.

Ich erkläre eine andere Teilnehmerfunktion.

 enum { TRADE }; void notify_chat_trade ( void *event, void *data ) { /*       */ } ... init_publisher ( TRADE, notify_chat_trade, NULL ); 

Jetzt kommen in der Datei, in der neue Daten empfangen und analysiert werden, Rabattdaten. Ich muss nur eine solche Funktion aufrufen und die Daten werden bei Bedarf übertragen.

 /*      10,      . */ send_event ( TRADE, 10 ); 

Und so ist es bequem und einfach, ohne dass Sie Schwierigkeiten haben, das gewünschte Ergebnis zu erzielen. Ich denke, ich habe es gut gemacht.

Übrigens, wer kann es mir erklären, ist es strukturelle Programmierung oder prozedurale?

Source: https://habr.com/ru/post/de483520/


All Articles