The reasons for that is, the Factory can delegate to the grammar object if it is Cloneable, but it can do other things as well such as keep a list of creates grammars or returning adapters or returning cached instances (in general, stuff which is independent of the actual grammar implementation).