Usando o observador de padrões de similaridade em C

Recentemente, lembrei-me de ler um livro sobre padrões de design para java e, devido ao fato de ainda não entender como isso é feito a partir da memória no OOP, decidi escrever minha implementação em C.

Decidi olhar novamente neste livro sobre como esse padrão é implementado. Eu olhei o capítulo inteiro, olhei o código, mas nada foi depositado na minha cabeça. Porque ) É correto pensar em estilo oop? Por exemplo, eu sei um pouco de java e c ++, mas quão conveniente é possível fazer a implementação para que seja agradável de usar e não seja esquecido? Também para o experimento, observei como isso é feito em c ++. Bem, honestamente, é difícil para mim olhar para esse código, tenho que ler todas as linhas e pensar.

Então, o que eu fiz que pode ser útil no futuro em programação? Conheça a implementação no github . Quero explicar a facilidade de uso do que escrevi. Nesta implementação, você não precisa criar uma estrutura que armazene dados. A estrutura subjacente em si está nos bastidores. Por exemplo, quero assinar um arquivo no editor TRADE. Este editor, por exemplo, me dará descontos em produtos. Considero o observador como uma função comum e a declaro de acordo com a regra.

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

Agora, quero criar um editor e assinar eventos. Nesse caso, você não precisa chamar nada extra. Só é necessário indicar para qual editor transferir o assinante.

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

E é isso. nós nos inscrevemos no editor. Agora, em outro arquivo, por exemplo, quero fazer um boletim informativo no chat online. Não sei como seria conveniente fazer isso no OOP, e mais ainda no java, mas com a ajuda da minha implementação, isso é feito simplesmente. A propósito, o java provavelmente teria que usar métodos estáticos.

Estou declarando outra função de assinante.

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

Agora, no arquivo em que novos dados são recebidos e analisados, vêm os dados de desconto. Eu só preciso chamar essa função e os dados serão transferidos quando necessário.

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

E, portanto, é conveniente e simples, sem as dificuldades de uso, você pode obter o resultado desejado. Eu acho que fiz bem.

A propósito, quem pode me explicar, é programação estrutural ou processual?

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


All Articles