1

내 선생님은 정말 좋은 사람이고 나는 그의 요점을 이해하는 경향이 있지만,이 사람은 내 머리 위로 간다. 그는 두 가지 변형에서 템플릿 방법을 설명합니다.
- 표준 변형 : 고정 된 알고리즘의 변형 부분을 정의하는 추상 메서드가있는 추상 클래스로 구성된 표준 변형입니다.
- 분리 : 클래스에 templateMethod()가 포함되어 있고 인터페이스에 대한 위임을 사용하여 알고리즘의 부분을 다양하게하는 전략을 사용하여 전략 패턴과 똑같이 보입니다.템플릿 방법 (분리)과 전략 패턴의 차이점은 무엇입니까?

누군가 자신의 요점은 무엇이며 어떻게 '분리'변형이 전략 패턴과 다른지 알 수 있습니까?
그의 책 (아직 출판되지 않은)에서 두 패턴을 포함하는 이미지를 첨부했습니다.

http://img64.imageshack.us/img64/3620/strategytemplate.jpg

+1

선생님의 허가를 받아 페이지를 게시하고 공개 토론을 할 수 있습니까? – kgiannakakis

+0

질문과 답변을 읽었을 때, 저는 이것이 다른 이름의 전략 패턴과 같다고 생각합니다. 선생님에게 이것에 대해 물어 보셨습니까? 그가 말하는 것을 듣고 싶습니다. – KarstenF

답변

1

템플릿 메서드 패턴의 "분리 변형"에 대해 들어 본 적이 없으며 전략과 매우 유사하다는 데 동의합니다. 인터페이스 소유권에 대해 어떤 추론이 있거나 클라이언트 관점에서 어떻게 호출하는지에 대해서도 다른 패턴을 고려하면 어떤 이점도 없다는 것을 거의 발견하지 못합니다.

+0

글쎄요, 선생님이 그렇게하는 이유가 있어야합니다. 내 인상은 우리가 시험에서 이것을 설명 할 수 있어야하고, 그것이 이상하다는 것을 발견했다. 명확한 (미묘하지 않은) 차이점이 없다. 차이점은 사용 방법에있을 수 있습니까? 마찬가지로 Template Method는 클라이언트에서 호출되지 않지만 Strategy는 클라이언트에서 호출되어 전략을 변경할 수 있습니다. 말이 돼? – kTk

1

을 시도, 템플릿 메소드는 다양한 동작을 제공하기 위해서 서브 클래스를 사용합니다. 전략을 사용하면 알고리즘 개체 인을 삽입하십시오. 귀하의 예에서는 템플릿 (분리)전략 사이에는 아무런 유익이 없습니다. 감마 책의 나이를 감안할 때이 새로운 용어를 적절히 설명하면 다른 프로그래머와 이야기 할 때 혼동을 일으킬 수 있습니다. 수업 외에서는 사용하지 마십시오.

템플릿을 사용하면 기본 클래스의 보호 된 멤버에 액세스 할 수 있습니다. 전략을 사용하면 알고리즘을 사용하는 객체와 더 많이 결합 된 알고리즘을 개발할 수 있으며 동일한 알고리즘을 다양한 객체 유형에 삽입 할 수 있습니다.

+0

맞습니다.하지만 제가 묻는 것은 Template Method의 '분리 된'변형입니다. 나는 '통일'이체에 대해 당신과 완전히 동의하지만 전략과 비교할 때 '분리'를 어떻게 이해합니까? -이 변형에 보호 된 메서드 나 추상 클래스가 없습니다. – kTk

+0

선생님이 '분리'양식을 작성했으며 차이가 없다고 생각합니다. 차이가 있다면, 그것은 매우 좋으며, 나는 그것에 대해 걱정할 필요가 없다고 생각합니다. 그에 따라 내 대답을 업데이트 할 것입니다. –

+0

답변을 주셔서 감사합니다. – kTk

0

템플릿 방법 :

  1. 메소드 스텁을 만드는 데 사용하고 서브 클래스 구현의 단계 중 일부를 연기하는 것 행동 디자인 패턴
  2. 입니다. 순서가 고정 된 특정 단계로 구성됩니다.
  3. 알고리즘을 실행하는 단계를 정의하며 모든 서브 클래스 또는 일부 서브 클래스에 공통적 인 기본 구현을 제공 할 수 있습니다.
  4. 슈퍼 클래스 템플릿 방법은

전략 패턴, 서브 클래스에서 메소드를 호출 :

  1. 그건 그것은 위임을 기반으로
  2. 행동 패턴
  3. 그것은 개체의 내장을 변경 메서드 동작을 수정하여
  4. 알고리즘 계열간에 전환하는데 사용됩니다.
  5. 런타임시 오브젝트의 동작이 변경됩니다. 한 알고리즘은 알고리즘 계열에서 선택됩니다.

기본 차이.

  1. 템플릿 방법 상속 및 전략을 사용 조성물을
  2. 무시되지 않아야 템플릿 방법 기본 클래스 구현를 이용한다. 이런 식으로 는 알고리즘의 구조는 슈퍼 클래스에 의해 제어되며, 세부 사항은 우리에게 변경할 수있는 기능을 제공는 인터페이스 뒤에 알고리즘을 캡슐화
  3. 전략, 서브 클래스에서 구현된다 실행시의 알고리즘 여러 전략을 통해 서로 다른 구현 방법을 인터페이스에 제공합니다.

는 Journaldev Template method보고 sourcemaking 기사와 함께 더 나은 이해를위한 Strategy 기사 되세요.

관련 문제