https://medium.com/@contact.ouyang/design-patterns-your-codes-superpower-not-a-magic-trick-fdba2291533e