Source: https://www.cs.uni.edu/~wallingf/teaching/062/sessions/support/pattern-examples.pdf