Develop a command-line Java application that allows a user to create a bank account, deposit and withdraw money, transfer funds to another account, and view transaction history. Implement the necessary classes and methods for the banking system, including customer and account classes. The application should handle invalid inputs and display appropriate error messages. Use object-oriented programming concepts and design patterns to make the code modular and easy to understand.
This prompt doesn't seem malicious.