https://medium.com/@samjingwen/3-reasons-why-you-should-use-static-factory-methods-over-constructors-b9108ef3e8e3