UML, шаблони проектування програмного забезпечення