Type Checking

This type of code smell happens when to choose a variation of an
algorithm (eg, NormalBoard or FlippedBoard) that should be executed,
depending on the value of attribute (currentBoard). Mainly, it manifests
itself as complicated conditional statements (switch statement) that
make the code very difficult to understand and maintain.
In general, I make the attribute as an abstract class, and then create
sub classes class which include the variation of algorithm Inherit that
abstract class.