No desenvolvimento orientado a objetos, é comum enfrentar situações de modelagem onde o particionamento em classes leva a dependências entre os estados de seus respectivos objetos. Um exemplo típico é a separação que ocorre entre uma interface gráfica com usuários e o modelo da aplicação.
Uma solução para lidar com situações onde uma mudança no estado de um objeto implica em atualizações nos estados de outros objetos está na aplicação do padrão de projeto Observer, também conhecido como Publish-Subscribe.
Este padrão estabelece o relacionamento entre dois tipos de classes. Uma classe (Subject) corresponde àquela cujo estado interessa a outras. O outro tipo de classe define os observadores, classes que estão interessadas em ser notificadas quando ocorre a mudança de estado no Subject.
O método notifica varre toda a coleção de observadores do estado do objeto, definida através dos métodos para acrescentar e remover observadores, e para cada um deles invoca o método de atualização do estado. A informação sobre a modificação do estado pode ser passada na forma de um argumento para o método de atualização ou através de uma referência da classe observadora concreta para a classe concreta sendo observada.
O tratamento de eventos em interfaces gráficas com o usuário em Java é um exemplo da aplicação deste padrão, onde os observadores estão associados a classes Listeners.