если вы хотите, чтобы он был изменяемым, я бы предложил использовать шаблон FlyWeight. Вы можете сделать его похожим на шаблон команды, поскольку он является хешем объектов, и он использует те же объекты, если они уже существуют, сохраняя состояние объектов.
Вы можете думать о FlyWeight как о группе одноэлементных объектов, которые можно вызывать на лету (с помощью хэш-функции).
Таким образом, фабрика flyweight будет размещать все ваши объекты в хэш-карте, и вы сможете использовать фабрику, чтобы получить объект, сохраняющий его состояние.
http://www.avajava.com/tutorials/lessons/flyweight-pattern.html -> для справки.