디자인 모드 가 TypeScript 에서 의 응용 - 관찰자 모드

2192 단어
정의.
대상 의 상태 가 바 뀌 면 그 대상 에 의존 하 는 모든 대상 에 게 알려 집 니 다.
이루어지다
생각:
  • 발표 자 지정;
  • 게시 자 에 게 캐 시 목록 을 추가 하여 구독 자 에 게 알 리 기 위해 리 셋 함 수 를 저장 합 니 다.
  • 마지막 으로 메 시 지 를 발표 할 때 게시 자 는 이 캐 시 목록 을 옮 겨 다 니 며 저 장 된 구독 자 리 셋 함 수 를 순서대로 터치 합 니 다.

  • 예:
    //    
    class Subject {
      //     ,        ,       
      private observers: Observer[] = new Array()
      private state: number
    
      //      
      public subscribe (observer: Observer): void {
        this.observers.push(observer)
      }
    
      //     ,     
      public setState(state: number): void {
        console.log(`Warning: State changed: ${state}`)
        this.state = state
        this.publish()
      }
    
      //     
      public getState(): number {
        return this.state
      }
    
      //     
      public publish (): void {
        for (let observer of this.observers) {
          observer.update()
        }
      }
    
      //     
      public unsubscribe (observer?: Observer): void {
        //       ,      
        if (!observer) {
          this.observers = new Array()
        } else {
          this.observers.splice(this.observers.indexOf(observer), 1)
        }
      }
    }
    
    //       
    abstract class Observer {
      //      
      protected subject: Subject
    
      //     
      public abstract update (): void
    }
    
    class AObserver extends Observer {
      //        
      public constructor (subject: Subject) {
        super()
        this.subject = subject
        this.subject.subscribe(this)
      }
    
      public update() {
        console.log(`AObserver: ${this.subject.getState()}`)
      }
    }
    
    class BObserver extends Observer {
      //        
      public constructor (subject: Subject) {
        super()
        this.subject = subject
        this.subject.subscribe(this)
      }
    
      public update() {
        console.log(`BObserver: ${this.subject.getState()}`)
      }
    }
    
    const subject = new Subject()
    
    const aObserver = new AObserver(subject)
    const bObserver = new BObserver(subject)
    
    console.log('========')
    console.log('State change: 100')
    subject.setState(100)
    console.log('========')
    
    console.log('=========')
    console.log('aObserver     ')
    subject.unsubscribe(aObserver)
    console.log('State change: 150')
    subject.setState(150)
    console.log('=========')
    
    

    좋은 웹페이지 즐겨찾기