재미있는 수학

Menu

템플릿 메소드 예제

이러한 클래스를 사용하는 클라이언트 코드와 관련된 또 다른 문제가 있었습니다. 처리 개체의 클래스에 따라 적절한 작업 과정을 선택한 많은 조건부가 있었습니다. 세 가지 처리 클래스 모두 공통 인터페이스 또는 기본 클래스가 있는 경우 클라이언트 코드의 조건부를 제거하고 처리 개체에서 메서드를 호출할 때 다형성을 사용할 수 있습니다. 도우미 메서드는 추상 메서드일 수 있으며, 이 경우 하위 클래스는 구체적인 구현을 제공해야 하거나 수퍼클래스에 빈 본문이 있는 후크 메서드가 될 수 있습니다. 하위 클래스는 후크 메서드를 재정의하여 작업을 사용자 지정할 수 있지만 필수는 아닙니다. 템플릿 메서드의 목적은 하위 클래스가 특정 단계를 구체화하거나 재정의할 수 있도록 하면서 작업의 전체 구조를 정의하는 것입니다. [2] 위의 예는 주문 처리 흐름을 다룹니다. OrderProcessTemplate 클래스는 알고리즘 스켈레톤을 포함하는 추상 클래스입니다. note에 표시된 것처럼 processOrder()는 프로세스 단계를 포함하는 메서드입니다. 우리는 동일한 순서 처리 단계를 가지고 두 개의 하위 클래스 NetOrder 및 StoreOrder가 있습니다. ComputerBuilder 클래스는 마더보드 및 프로세서와 같은 다른 구성 요소를 추가하고 설정하는 방법을 선언하여 컴퓨터를 빌드하는 데 필요한 단계를 요약합니다. 클라이언트는 기본 클래스의 템플릿 메서드를 호출하고 다른 단계의 구현에 따라 기본 클래스의 일부 메서드와 하위 클래스의 메서드중 일부를 사용하고 있습니다. 템플릿 메서드 패턴의 예제를 볼 수 있습니다.

AbstractClass에는 다시 ridd할 수 없도록 최종으로 만들어야 하는 templateMethod()가 포함되어 있습니다. 이 템플릿 메서드는 알고리즘을 실행 하기 위해 사용할 수 있는 다른 작업을 사용 하지만 이러한 메서드의 실제 구현에 대 한 분리 됩니다. 이 템플릿 메서드에서 사용되는 모든 작업은 추상화되므로 구현이 하위 클래스로 연기됩니다. 템플릿 메서드를 사용하면 모놀리식 알고리즘을 일련의 개별 단계로 전환할 수 있으며, 하위 클래스에서 쉽게 확장할 수 있으며 수퍼클래스에 정의된 구조를 그대로 유지할 수 있습니다. 런타임시 템플릿 메서드로 표시되는 알고리즘은 템플릿 메시지를 콘크리트 하위 클래스 중 하나의 인스턴스에 전송하여 실행됩니다. 상속을 통해 기본 클래스의 템플릿 메서드가 실행되기 시작합니다. 템플릿 메서드가 도우미 메서드 중 하나를 요청하는 메시지를 자체 요청으로 보내면 구체적인 하위 인스턴스에서 메시지가 수신됩니다. 도우미 메서드가 재정의된 경우 하위 인스턴스의 재정의 구현이 실행됩니다.

재정의되지 않은 경우 기본 클래스에서 상속된 구현이 실행됩니다. 이 메커니즘은 전체 알고리즘이 매번 동일한 단계를 따르는 동시에 일부 단계의 세부 정보가 알고리즘을 실행하기 위해 원래 요청을 받은 인스턴스에 종속되도록 합니다. 데이터 마이닝 앱에서 이것이 어떻게 재생되는지 살펴보겠습니다. 세 가지 구문 분석 알고리즘모두에 대한 기본 클래스를 만들 수 있습니다. 이 클래스는 다양한 문서 처리 단계에 대한 일련의 호출로 구성된 템플릿 메서드를 정의합니다. 실제로 실제 templateMethod()가 최종이어야 함을 정의하는 템플릿 메서드의 정의는 하나도 없습니다. 경우에 따라 재정의할 수 있습니다. 물건을 만드는 것을 그만두십시오, 친구, 당신은 그것을 위한 것이 아닙니다.

교과서에 충실하고, 조에서 물건을 복사 중지! 템플릿 메서드는 상속을 기반으로 합니다. 전략은 컴포지션을 기반으로 합니다: 해당 동작에 해당하는 다른 전략을 제공하여 오브젝트 동작의 일부를 변경할 수 있습니다. 템플릿 메서드는 클래스 수준에서 작동하므로 정적입니다. 전략은 개체 수준에서 작동하므로 런타임에 동작을 전환할 수 있습니다. 이 패턴은 상위 수준 코드가 더 이상 실행할 알고리즘을 결정하지 않으므로 컨트롤 반전의 예입니다. 대신 런타임에 하위 수준 알고리즘이 선택됩니다.

No categories

Comments

Sorry, comments are closed for this item.