관찰자 디자인 패턴 해석

관찰자 모드는 사용률이 매우 높은 모드로 GUI 시스템 및 구독 게시 시스템에서 일반적으로 사용됩니다. 이 모델의 중요한 기능은 디커플링, 관찰자와 관찰자를 디커플링하여 그들 사이의 의존성을 더 작게 만들거나 심지어 의존없이 만드는 것입니다.

정의

개체 간의 일대 다 종속성 관계를 정의하여 각 개체의 상태가 변경 될 때 해당 개체에 종속 된 모든 개체가 알림을 받고 자동으로 업데이트되도록합니다.

UML 图

관찰자 UML

  • 주제
    추상 주제, 즉 Observable의 역할입니다. 추상 주제 역할은 컬렉션의 모든 관찰자 객체에 대한 참조를 저장합니다. 각 주제는 여러 관찰자를 가질 수 있습니다. 추상 주제는 인터페이스를 제공합니다. 관찰자 객체 추가 및 삭제
  • ConcreteSubject
    특정 주체,이 역할은 관련 상태를 특정 옵저버 객체에 저장하고, 특정 주체의 내부 상태가 변경되면 등록 된 모든 옵저버에게 통지합니다. 특정 주체 역할을 콘크리트 옵저버 (ConcreteObservable) 역할이라고도합니다.
  • 옵저버는
    추상 옵저버입니다.이 역할은 옵저버의 추상 클래스입니다. 테마 변경 알림을받을 때 자신을 업데이트하는 업데이트 인터페이스를 정의합니다.
  • ConcreteObserver
    구체적인 관찰자. 이 역할은 주체의 상태가 변경 될 때 자신의 상태를 업데이트하기 위해 추상 관찰자 역할에 의해 정의 된 업데이트 인터페이스를 구현합니다.

관찰자 모드 코드 구현 (Java)

초록 관찰


public abstract class Subject {

    // 定义一个观察者数组
    private Vector<Observer> obs = new Vector<>();

    // 增加一个观察者
    public void addObserver(Observer o) {
        this.obs.add(o);
    }

    // 删除一个观察者
    public void delObserver(Observer o) {
        this.obs.remove(o);
    }

    // 通知所有观察者
    public void notifyObservers() {
        for (Observer o : this.obs) {
            o.update();
        }
    }

    public abstract void doSomeThing();

}

특정 관찰자

public class ConcreteSubject extends Subject{
    
    

    @Override
    public void doSomeThing() {
        // TODO 被观察者 处理具体业务逻辑
        System.out.println("被观察者处理业务逻辑 ,并通知观察者");
        // 通知观察者 
        super.notifyObservers();
    }

}

관찰자

public interface Observer {
    // 更新方法
    public void update();
}

특정 관찰자

public class ConcreteObserver implements Observer{
    
    
    @Override
    public void update() {
        // 观察者处理具体业务逻辑
        System.out.println("观察者接到信息,并处理");  
    }
}

관찰자 모드 호출

public class ObserverPatterns {

    public static void main(String[] args) {
        ConcreteSubject observed = new ConcreteSubject();
        Observer observer=new ConcreteObserver();
        observed.addObserver(observer);
        observed.doSomeThing();
    }
}

해당 장면

  1. 관련 행동 시나리오
  2. 이벤트 다단계 출발 장면
  3. 메시지 큐 및 이벤트 버스 처리 메커니즘과 같은 시스템 간 메시지 교환 시나리오

요약하자면

관찰자 패턴의 주요 기능은 객체를 분리하고 관찰자와 관찰자를 완전히 분리하고 Observer 및 Observable 추상화에만 의존하는 것입니다.

이점

  • 관찰자와 관찰자간에 비즈니스 변화를 다루는 추상적 인 결합이 있습니다.
  • 시스템의 유연성 및 확장 성 향상

불리

옵저버 모드 적용시 개발 효율성 및 운영 효율성 문제를 고려해야합니다. 프로그램에는 한 명의 옵저버, 여러 옵저버, 개발 및 디버깅 등이 포함되어 있습니다. 내용이 더 복잡해지며 JAVA에서 메시지 알림은 순차적으로 실행됩니다. 기본값입니다. 관찰자가 멈춰서 전체 실행 효율성에 영향을줍니다.이 경우 일반적으로 비동기 방식이 사용됩니다.

추천

출처blog.csdn.net/xufei5789651/article/details/79937870