Source: https://www.utdallas.edu/~chung/SP/applying-uml-and-patterns.pdf