That is a very … fresh approach. I would argue to never ever replace if/else in production code. I guess performance implications do not matter to you. Creating classes all the time you change state trashes memory like crazy. Changing state now also involves an indirection (method lookup and call). You also eliminate any chance of compiler optimization or branch prediction. I would stay the hell away from this approach for anything but toy examples. If you feel your code is really more maintainable and you don’t care about performance, go for it. I would argue, you need far less if statements if you cleaned up responsibilities in the first place.