Shouldnt Reactions have Effects? Maybe we create a class named IEffect and maybe it implements or extends IReaction.
Changed the name of getProduct() to getOutcome(). More sensible name.