>

아래 그림을 고려하십시오.

문제 :

디자인 패턴도서의 294 페이지에서적용 성의 첫 번째 항목 :

  • When an abstraction has two aspects, one dependent on the other. Encapsulating these aspects in separate objects lets you vary and reuse them independently.

Q1 : "다양하고 개별적으로 재사용"하려면 ConcreteObserver를 ConcreteSubject에 바인딩 한 이유는 무엇입니까?

아니요, 이것은 구현에 관한 질문이 아닙니다. 저자는 다이어그램을 디자인 할 때 자신의 생각에 일반적인 객체 지향 아이디어를 가져야하는데, 이것이 ConcreteSubject와 ConcreteObserver 사이에 커플 링을 일으킬 것이라고 생각하지는 않습니다.

Q2 : 주제 인터페이스의 목적은 무엇입니까? 일부 책은 생략합니다.

아니요, 이것은 구현에 관한 질문이 아닙니다. 필자는 절충안이라고 생각한다. 저자는 그것에 대해 약간의 아이디어를 가지고 있어야하므로, ConcreteSubject의 참조를 보유한 ConcreteObserver가 인터페이스가 전혀 필요하지 않다는 의미에 상관없이 인터페이스를 만들기로 결정한다. 변경하지 마십시오. 하지만 이것은 내 의견 일뿐입니다.

Q1의 경우, 이것이 SOLID 원칙 중 하나와 관련이 있다고 생각합니다.
2 분기에는 모든콘크리트과목의 인터페이스를 통합하는 것이지만 인터페이스 자체는 코드에 표시되지 않습니다.

다른 관점이 필요합니다.


  • 답변 # 1

    <올>

    "관심자에 따라 다를 수 있습니다",관찰자를 바꾸고제목을 재사용 할 수 있다고 말해야합니다. . 그 반대는 이해가되지 않습니다. 296 페이지가 다이어그램과 모순됩니다.

    와이즈 비즈

    구체적으로 구현에 직접적인 의존이있을 때 주제 없이는 관찰자를 재사용 할 수 없습니다.

    코드 재사용은 주제 추상화의 가장 명백한 목적인 것 같습니다. 그러나 다른 구체적인 주제와 관련이없는 애플리케이션 컨텍스트 와이어 링 빈을 함께 상상할 수도 있습니다 (아마 관찰자가 297 페이지의 "둘 이상의 주제 관찰"). 관찰자가 주제에 대한 참조를 유지하고 자체 등록하는 경우 주제 추상화가 필요하지 않을 수 있습니다.

    You can reuse subjects without reusing their observers, and vice versa.

  • 이전 c++ - glm의 뷰 매트릭스에서 변환 매트릭스를 추출하는 방법이 있습니까?
  • 다음 python - 링크리스트 노드 인쇄