Implement the Observer design pattern