🐷
C 言語 で Observer パターン
/*
Observer パターン的な
*/
#include <stdio.h>
#include <stdarg.h>
#define OBSERVER_MAX 4
typedef void (*observer)(int argc, ...);
observer observers[OBSERVER_MAX];
int end_index;
void register_observer(observer o)
{
if(end_index >= OBSERVER_MAX)
{
printf("queue is full\n");
return;
}
observers[end_index] = o;
end_index++;
}
void notify_observer(void)
{
int i;
for(i = 0; i < end_index; i++)
{
observer o = observers[i];
if(o != NULL)
{
o(1, i);
}
}
}
void initialize(void)
{
int i;
for(i = 0; i < OBSERVER_MAX; i++)
{
observers[i] = NULL;
}
end_index = 0;
}
void update1(int argc, ...)
{
int i;
va_list args;
va_start(args, argc);
printf("update1\n");
for(i = 0; i < argc; i++)
{
int n;
n = va_arg(args, int);
printf("%d\n", n);
}
va_end(args);
}
void update2(int argc, ...)
{
int i;
va_list args;
va_start(args, argc);
printf("update2\n");
for(i = 0; i < argc; i++)
{
int n;
n = va_arg(args, int);
printf("%d\n", n);
}
va_end(args);
}
void test_observer(void)
{
printf("test_observer start\n");
initialize();
register_observer(update1);
register_observer(update2);
notify_observer();
printf("test_observer end\n");
}
int main(int ac, char** av)
{
test_observer();
return 0;
}
test_observer start
update1
0
update2
1
test_observer end
Discussion