Which design pattern can be used to reduce the number of couplings between objects from O(n2) to O(n)?