There's also the Template Method, where subclasses can override without changing the overall algorithm. But it's important to know that design patterns are only useful when they're applicable in a certain situation. Every developer should know where to look when they're faced with a situation where a design pattern could help, but I wouldn't say any pattern is an absolute must-know. All depends on what you run into.