what are the three "dimensions of Combinations" of Design Patterns Explain for each dimension how it improved Software quality