Using Decision Tables/Trees can greatly reduce the act of "distinguishing" objects.
Every decision has a result, you can further reduce complexity by abstracting the action that occurs given a result.
Composite, Command, Chain of Responsibility, Abstract Factory