This is another topic that was not fully covered in my computer science degree and I think it is a very useful topic for when you actually start working. Design patterns are basically reusable solutions to common problems. They fall under three categories: creational patterns, structural patterns, and behavioral patterns.
Creational Design Patterns
Creational design patterns are all about class instantiation.
Names of Patterns:
- Abstract Factory
- Builder
- Factory Method
- Object Pool
- Prototype
- Singlton
Structural Design Patterns
Structural design patterns are all about class and object composition. It does this with classes by using inheritance to compose interfaces and then composes objects in different way in order to obtain different functionality.
Names of Patterns:
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
-
Private Class Data
- Proxy
Behavioral Design Patterns
Behavioral design patterns are more concerned about communication between objects.
Names of Patterns:
- Chain of responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Null Object
- Observer
-
State
- Strategy
- Template method
- Visitor
As you can see there are many different patterns for each category. Although do not think all of these patterns will answer all of your programming problems. There is some debate on how useful design patterns actually are and when to use them. I would find a pattern that you find interesting and try to implement it in a side project before using it for actual work and be sure that using a pattern is the best way to do things before implementing it in your project.
You can find more information on all of these patterns at Source Making