Design three kinds of ATMs with the following OO design patterns: State pattern, Strategy pattern, Abstract factory pattern