I refer to this part  "... This implementation is the most simple and intuitive (Let's call it noob implementation). The problem here is that once we add a new concrete product [Runnable] call we should modify the Factory class. It is not very flexible and it violates open close principle. Of course we can subclass the factory class, but let's not forget that the factory class is usually used as a singleton. Subclassing it means replacing all the factory class references everywhere through the code..."

To make my point clear:

1. It would be more difficult add new tests, I would need to add a new enum , a case and a runnable implementation and call it, two steps more.

2. I don't see any benefit.