The Most Used Design Patterns That Every Programmer Should Know