I generally prefer polymorphism to conditionals such as case statements unless the introduction of an additional class introduces lots of complexity.  I don't think it would here, though; I think it would simply to have an `AndComposite` and an `OrComposite` matcher, each of which does the correct thing.  Then there's no need for the `else` case here (or a case statement at all) and the `and` and `or` methods can return the appropriate one.