Looks to me like there's one level too much here. You should only need 3 classes to represent the boolean logic.