A method call happens once and is gone. Turn that request into an object with execute() and undo(), and suddenly you can queue it, log it, retry it, and reverse it — the backbone of undo/redo, job queues, and transactional replay.
When you must hold millions of near-identical objects, one-object-per-instance quietly blows the heap. Flyweight splits shared shape from per-use position — and hands out one copy for all of them.
Every undo, savepoint, and game save has the same problem — capture an object's private state so you can restore it later, without letting the thing holding the snapshot read or corrupt what's inside.