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.
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?