https://www.runoob.com/design-pattern/design-pattern-tutorial.html