Using generic to prevent downcast for Strategy Pattern, every time we try to cast something, may be worth to consider generic first? - http://www.javaspecialists.co.za/archive/newsletter.do?issue=123 http://javarevisited.blogspot.com.au/2014/04/difference-between-state-and-strategy-design-pattern-java.html