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