PatternObserver