https://medium.com/@godwin.theophilus.in/checkout-structural-design-patterns-with-examples-in-python-8129e1d0f59a