Various Software Design Patterns