Read-only interface is a simple thing. It does not allow user to change its state. But sometimes you may want to "change" it. I'm not talking about actual modification of state of object. I'm talking about creation of NEW object which state is almost the same as the old one.