문제

나는 명령 패턴에 매우 익숙하지만 아직 untictor와 명령의 이론의 차이를 이해하지 못합니다. 특히 Java 구현을 생각하고 있습니다. 둘 다 기본적으로 객체로 표시되는 "동사"를 프로그래밍합니다. 그러나 기능의 경우, 일부 예제에서 본 것처럼 익명의 내부 클래스 구현이 일반적으로 보입니다. 누구든지 나를 위해 이것을 깨끗하게 할 수 있습니까?

도움이 되었습니까?

해결책

functor는 '구문 레벨'개념입니다. 기능 포인터처럼 구문으로 처리 할 수있는 객체에서 코드를 포장합니다. 즉, 매개 변수 목록을 괄호 안에 넣어 '호출'될 수 있습니다. C ++에서는 Operator ()를 재정의하여 클래스 A 기능을 만들 수 있습니다.

명령 패턴의 명령은 런닝 가능한 기능을 포장하는 객체이지만 기능이 될 필요는 없습니다. 예를 들어, 인터페이스 iCommand를 구현하는 클래스 일 수 있으며, do ()를 호출하여 명령을 실행할 수 있습니다.

다른 팁

functor는 객체가 함수처럼 행동하게 만드는 방법 인 구현입니다.

'명령 패턴'은 디자인 패턴입니다.
FUNCTOR는 '명령 패턴'을 구현하는 한 가지 방법입니다.

여기에 답이 있습니다 GOF:

Coplien은 C ++ [COP92]에서 함수, 기능인 객체를 구현하는 방법을 설명합니다. 그는 함수 통화 연산자 (Operator ())에 과부하를함으로써 사용에서 어느 정도의 투명성을 달성합니다. 명령 패턴은 다릅니다. 그 초점은 바인딩 유지 수신기와 함수 사이 (즉, 동작)가 아니라 함수 유지.

설명에서 Apache Commons Functor 페이지:


functor는 객체 또는 단일 일반 함수를 나타내는 객체로 조작 할 수있는 함수입니다.

기능은 다음을 포함한 여러 가지 강력한 프로그래밍 기술을 지원하고 장려합니다.

  • 기능적 스타일로 프로그래밍
  • 고차 기능
  • 내부 반복자
  • 상속 및 과부하보다는 구성을 통한 재사용 및 전문화
  • 일반 "콜백"또는 "확장점"API
  • 일반 "필터"또는 술어 API
  • 방문자, 전략, 책임 체인 등과 같은 많은 "행동 적"디자인 패턴 등

GOF (Gang of Four)에 따르면 (Comptrol에 의한) Functor와 명령은 두 가지 다른 패턴입니다.

이미 명시된 바와 같이, Functor는 서비스 방법을 포함하는 클래스를 다른 용어로 나타냅니다. Functor 클래스의 주요 책임은 자체 방법으로 구현 된 특정 논리를 저장하는 것입니다. 따라서 우리는 Functor에서 자체 방법의 내부 논리를위한 컨테이너를 어떻게 생각할 수 있습니다. 역사적으로, Functor Borns는 Java 사양에서 '기능 포인터'의 구현 및/또는 개념이 없기 때문에 등록 된 콜백 (관찰자 패턴에 대한 특정 구현)의 맥락에서 매우 유용합니다.

명령 패턴은 수신기에서 Invoker 엔티티를 분리하는 것을 목표로하는 설계 패턴을 나타냅니다. 주로 액션 리스너 (GUI를 생각)에서 동작 (이벤트 생성)을 퇴치해야 할 때 사용됩니다. 특정 객체 수신기를 참조하는 특정 작업 (자체 슈퍼 클래스의 특정 명령 구현에 따라)의 굴착을 담당하는 방법이 있습니다. 명시된 정의에서 실행 방법은 "스마트하지 않음"으로 정의 될 수 있습니다. 실제로 스마트 구현을 사용하면 세 번째 오브젝트를 위임하는 대신 작동 논리를 구현하는 것이 자체적 일 수 있습니다. 스마트 실행 방법이 있으면 functor를 구현하고 있으며 명령 패턴의 맥락에 functor (특정 명령 서브 파트 구현)를 배치합니다.

이것이 당신에게 도움이되기를 바랍니다.

Functor는 명령 패턴의 구성 요소라고 생각하며, 여기에는 Invoker 및 Command Receptient와 같은 다른 인프라가 포함됩니다.

명령 패턴은 Java에서 폐쇄가 없기 때문에 Java에서 사용됩니다. FUNCTORS는 폐쇄를 구현하려는 시도입니다.

클로저가있는 언어에는 명령 패턴이 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top