Utilisation de l'observateur du modèle de similitude en C

Je me suis récemment rappelé avoir lu un livre sur les modèles de conception pour java et du fait que je ne comprends toujours pas comment cela se fait de la mémoire dans la POO, j'ai décidé d'écrire mon implémentation en C.

J'ai décidé de regarder à nouveau dans ce livre java sur la façon dont ce modèle est implémenté. J'ai regardé tout le chapitre, j'ai regardé le code, mais rien n'était laissé dans ma tête. Pourquoi ) Est-il juste de penser dans un style oop? Par exemple, je connais un peu java et c ++, mais comment est-il possible de faire l'implémentation pour qu'elle soit agréable à utiliser et ne soit pas oubliée? Aussi pour l'expérience, j'ai regardé comment cela se fait en c ++. Eh bien, honnêtement, c'est difficile pour moi de regarder un tel code, je dois lire chaque ligne et réfléchir.

Alors qu'est-ce que j'ai fait qui pourrait être utile à l'avenir dans la programmation? Rencontrez l'implémentation sur github . Je veux expliquer la facilité d'utilisation de ce que j'ai écrit. Dans cette implémentation, vous n'avez pas besoin de créer une structure qui stockera les données. La structure sous-jacente elle-même est dans les coulisses. Par exemple, je souhaite m'abonner dans un fichier à l'éditeur TRADE. Cet éditeur, par exemple, me donnera des remises sur les produits. Je considère l'observateur comme une fonction ordinaire et le déclare selon la règle.

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

Maintenant, je veux créer un éditeur et m'abonner aux événements. Dans ce cas, vous n'avez pas besoin d'appeler de supplément. Il suffit d'indiquer à quel éditeur transférer l'abonné.

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

Et c'est tout. nous nous sommes abonnés à l'éditeur. Maintenant, dans un autre fichier, par exemple, je veux faire une newsletter dans le chat en ligne. Je ne sais pas à quel point ce serait pratique de le faire dans la POO, et encore plus en java, mais avec l'aide de mon implémentation, cela se fait simplement. Soit dit en passant, java devrait probablement utiliser des méthodes statiques.

Je déclare une autre fonction d'abonné.

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

Maintenant, dans le fichier où de nouvelles données sont reçues et analysées, les données de remise arrivent. J'ai juste besoin d'appeler une telle fonction et les données seront transférées si nécessaire.

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

Et donc c'est pratique et simple sans les difficultés d'utilisation, vous pouvez obtenir le résultat souhaité. Je pense que j'ai bien fait.

Soit dit en passant, qui peut m'expliquer, s'agit-il d'une programmation structurelle ou procédurale?

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


All Articles