Understanding design patterns requires understanding basic object-oriented concepts . If you’ve done development with Java, C++, or C#, you’ll be familiar with the following concepts: Decomposition is the process of dividing a problem into smaller pieces—in other words, divide and conquer.