Practical Design Patterns in C