2013-05-17 2 views
5

저는 과제에 대한 관찰자 패턴을 조사했습니다. 지금까지 나는 "The Gang of Four"라고 불리는 사람들이 쓴 책에 처음 등장했다고 결론을 내 렸습니다.옵서버 디자인 패턴의 이야기는 무엇입니까?

그러나 첫 번째 구현은 SmallTalk MVC 기반 프레임 워크였습니다.

관찰자 패턴의 원점이 있습니까? 누가 먼저 설계 했습니까? GoF 회원 중 어느 것입니까? 창립 초기부터 어떤 변화가 있었습니까?

또한 패턴의 일부 구현은 Subject 클래스의 일반화 인 "ConcreteSubject"라고하는 것을 포함합니다. 이것은 패턴의 변형인가 아니면 오리지날 모델로부터의 진화인가?

답변

8

Gang of Four는 디자인 의도에 대한 커뮤니케이션을 돕기 위해 흔히 사용되는 패턴에 이름을 붙이고 있습니다. 글을 쓰는 것이 훨씬 쉽습니다. 누구도 읽을 수없는 댓글 블록보다 쓰기가 훨씬 쉽습니다.

// this is an observer 

사람들이 전문 용어를 공유하면 개발자는보다 효과적으로 의사 소통 할 수 있습니다.

옵저버 패턴은 OO 프로그래밍 전부터 오래되었습니다. 흔히 다양한 언어로 함수 포인터로 구현되는 "콜백"이라는 용어를 사용하거나 함수/프로 시저/서브 루틴을 호출해야한다는 플래그를 나타내는 데 사용되는 플래그를 사용했습니다. 이것은 모듈 간의 추상적 인 의사 소통의 가장 초기 형태 중 하나를 나타냅니다. 어셈블러 언어에서도 비슷한 접근법을 사용했습니다. 콜백 주소를 저장하고이를 사용하여 간접적으로 "발생했습니다"라고 알려줍니다.

기억해야 할 중요한 점은 디자인 패턴 책에서 Gang of Four의 구현이 "절대적인"것이 아니라는 점입니다. 그들은 접근법을 보여줄 것입니다. 추상 클래스, 인터페이스 또는 C# 델리게이트로 할 수있는 것처럼 Observer 패턴을 함수 포인터로 쉽게 구현할 수 있습니다.

(내가 BTW, 존스 홉킨스에서 디자인 패턴 과정을 가르 칠;))

+0

나는 아직 입수했습니다 가장 좋은 설명. 정말 고맙습니다! 오직 하나의 마지막 질문입니다. Subject 구성 요소를 "ConcreteSubject"로 일반화하는 이유를 잘 이해하지 못했습니다. 그게 다 뭐야? 다시 한번 감사드립니다. –

+1

"제목"은 듣고 자하는 것을 나타내는 추상화입니다. 일반적으로 인터페이스 또는 추상 클래스이지만 비 OO 언어의 함수 포인터 매개 변수 정의 일 수도 있습니다. ConcreteSubject는 주제 정의를 구현하는 것을 나타냅니다. 제목 (또는 포인터를 전달할 실제 함수)을 구현/확장하는 클래스. (그리고 친절한 말에 감사드립니다! 다행스럽게 도울 수있었습니다) –

1

The Gang of Four는 패턴을 고안하지 않았으며 개발자가 직면 한 공통 문제에 대한 솔루션을 카탈로그 화하기 위해 소프트웨어 필드를 관찰하고 조사했습니다.

누가 처음에 그것을 발명 했는가에 관해서는 당신의 추측은 내가 생각하는만큼 좋습니다. 누군가가 그것을 발명 한 사람을 알면 나는 관심을 가질 것이다. 제 의견으로는 누가 화재를 발명했는지 묻는 것과 같습니다 ...

ConcreteSubject는 Subject 인터페이스의 구현을 나타냅니다. 그리고 변형이 아니기 때문에 패턴을 용이하게하기위한 인터페이스가 필요합니다. (또는 수퍼 클래스이지만 인터페이스가 훨씬 더 좋습니다).

관련 문제