문제

공장과 전략 패턴의 차이점을 설명 할 수 있습니까?

저에게는 둘 다 추가 공장 수업 (공장 패턴에서 제품의 객체를 만드는 것) 이외의 것과 동일하게 보입니다.

도움이 되었습니까?

해결책

공장 패턴은 창조적 패턴입니다. 전략 패턴은 운영 패턴입니다. 다른 방법으로, 공장 패턴은 특정 유형의 객체를 만드는 데 사용됩니다. 전략 패턴은 특정 방식으로 작업 (또는 운영 세트)을 수행하는 데 사용됩니다. 고전적인 예에서, 공장은 다양한 유형의 동물을 만들 수 있습니다 : 개, 고양이, 호랑이, 전략 패턴은 예를 들어 특정 행동을 수행 할 것입니다. 달리기, 걷기 또는 lope 전략 사용.

실제로 두 사람은 함께 사용할 수 있습니다. 예를 들어, 비즈니스 객체를 만드는 공장이있을 수 있습니다. 지속 매체를 기반으로 다른 전략을 사용할 수 있습니다. 데이터가 XML에 로컬로 저장되면 하나의 전략을 사용합니다. 데이터가 다른 데이터베이스에서 원격 인 경우 다른 데이터베이스를 사용합니다.

다른 팁

전략 패턴을 사용하면 클래스의 동작을 다형 적으로 바꿀 수 있습니다.

공장 패턴을 사용하면 객체 생성을 캡슐화 할 수 있습니다.

게리는 좋은 지적을합니다. "Concretions"가 아닌 추상화로 코딩하는 원리를 사용하는 경우 많은 패턴이 테마의 변형처럼 보이기 시작합니다.

TVANFOSSON의 말에 추가하기 위해 많은 패턴이 구현까지 동일하게 보입니다. 즉, 코드에 이전이 없었던 인터페이스를 만들고 해당 인터페이스의 많은 구현을 만들 수 있습니다. 차이점은 그들의 목적과 그것들이 어떻게 사용되는지입니다.

  • 공장 (방법) 패턴.

구체적인 인스턴스 만 만듭니다. 다른 인수는 다른 대상을 초래할 수 있습니다. 그것은 논리 등에 따라 다릅니다.

  • 전략 패턴.

액션을 수행하기 위해 알고리즘 (단계)을 캡슐화하십시오. 따라서 전략을 변경하고 다른 알고리즘을 사용할 수 있습니다.

둘 다 매우 비슷한 것처럼 보이지만 목적은 다소 다르지만 한 목적은 다른 목적을 만드는 것입니다.

그래서. 공장 방법이 고정 된 경우 다음과 같이 가질 수 있습니다.

 public Command getCommand( int operatingSystem ) { 
      switch( operatingSystem ) { 
           case UNIX    :
           case LINUX   : return new UnixCommand();
           case WINDOWS : return new WindowsCommand();
           case OSX     : return new OSXCommand();
       }
  }

그러나 공장에 더 진보적이거나 역동적 인 생성이 필요하다고 가정합니다. 공장 방법에 전략을 추가하고 다시 컴파일하지 않고 변경할 수 있습니다. 전략은 런타임에 변경 될 수 있습니다.

우선 간단한 공장과 추상 공장의 차이가 있어야합니다. 첫 번째는 객체 생성을위한 공장 역할을하는 하나의 클래스 만있는 간단한 공장이며, 후자에는 공장 인터페이스 (메소드 이름을 정의하는)에 연결 한 다음이 인터페이스를 구현하는 다른 공장을 호출합니다. 일부 기준에 따라 동일한 방법의 다른 구현이 있어야합니다. 예를 들어, ButtonCreationFactory 인터페이스가 있습니다.이 인터페이스는 두 개의 공장, 첫 번째 WindowsButtonCreationCreationFactory (Windows 모양과 느낌으로 버튼을 생성) 및 두 번째 LinuxButtonCreationFactory (Linux 모양과 느낌으로 버튼을 만듭니다)에서 구현합니다. 따라서이 두 공장 모두 구현 (알고리즘)과 동일한 생성 방법을 가지고 있습니다. 원하는 버튼 유형의 방법을 기반으로 런타임 에서이 내용을 참조 할 수 있습니다.

예를 들어 Linux 모양과 느낌으로 버튼을 원한다면 :

ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);

또는 Windows 버튼을 원한다면

ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);

이 경우 정확히 일부 생성을위한 알고리즘을 차별화하기 때문에 일종의 전략 패턴을 초래합니다. 그러나 작동 알고리즘보다는 객체 생성에 사용되기 때문에 의미 적으로 다릅니다. 따라서 기본적으로 추상 공장을 사용하면 다른 전략을 사용하여 객체 생성이있어 전략 패턴과 매우 유사합니다. 그러나 전략 패턴은 작동하는 반면 추상적 인 것은 창조적입니다. 구현 현명한 구현은 동일합니다.

공장 (및 공장에서 공장에서 공장에서 회복):

  1. 창조적 패턴
  2. 상속에 기초합니다
  3. 공장은 공장 방법 (인터페이스)을 반환하여 구체적인 물체를 반환합니다.
  4. 인터페이스 및 클라이언트 (발신자)로 새로운 콘크리트 객체를 대체 할 수 있습니다.
  5. 클라이언트는 항상 인터페이스에만 액세스하고 공장 방법에서 객체 생성 세부 사항을 숨길 수 있습니다.

이것을 살펴보십시오 위키 백과 기사 그리고 Javarevisited 기사

전략 패턴 :

  1. 행동 패턴입니다
  2. 대표단을 기반으로합니다
  3. 방법 동작을 수정하여 물체의 내장을 바꿉니다.
  4. 알고리즘 제품군 사이를 전환하는 데 사용됩니다
  5. 실행 시간에 객체의 동작이 변경됩니다.

예시:

특정 품목 (항공료 티켓 또는 쇼핑 카트 항목)에 대한 할인 전략을 구성 할 수 있습니다. 이 예에서는 7 월에서 12 월에 품목에 25% 할인을 제공하며 Jaunary -June 기간 동안 품목에 대한 할인이 없습니다.

관련 게시물:

전략 패턴의 실제 예

디자인 패턴 : 공장 대 공장 방법 대 추상 공장

간단한 용어로 전략 패턴은 구현 클래스에 관심이없는 동작의 런타임 생성입니다. 다른 하나는 공장이 있었으며 콘크리트 클래스 인스턴스의 런타임 생성이며 구현 된 인터페이스에 의해 노출 된 동작 (메소드)을 사용하는 것은 귀하에게 달려 있습니다.

오스카가 말한 내용과 그의 코드를 참조하여 :

GetCommand는 공장이며 UnixCommand, WindowsCommand 및 OsxCommand 클래스입니다.

나는 공장 구현에 대한 그의 예가 다소 엄격하게 결합되고 매우 닫혀 있다는 점에서 오스카와 함께 갈 수 있습니다. 당신의 선택이 전략 패턴이라는 것은 놀라운 일이 아닙니다. 공장 구현은 예를 들어 인스턴스화되는 고정 된 수의 특정 클래스에 의존해서는 안됩니다.

public Command getCommand( int operatingSystem ) {        
   return commandTable.get(operatingSystem); 
}

...

public class WindowsCommand implements Command {
    ...
    static {
        CommandTable.getInstance().registerCommand(WIN_COMMAND_ID, new WindowsCommand());
    }

}

하나 또는 서로를 선택하는 가장 적절한 기준은 대부분 수업과 방법의 이름을 지정하는 데 사용하는 용어이며, 우리 모두가 인터페이스에 프로그램을하는 경향이 있고 수업에 중점을두고 목표에 중점을 두어야합니다. 우리는 결정을 목표로합니다. 런타임에 실행되는 코드. 즉, 우리는 두 패턴을 모두 사용하여 목표를 달성 할 수 있습니다.

전략과 공장은 다른 목적입니다. 전략에는 접근 방식이 정의되어 있으며이 패턴을 사용하여 동작 (알고리즘)을 교환 할 수 있습니다. 공장에 오면 주변에는 많은 변형이 있습니다. 그러나 Go4의 원래 패턴은 공장 공장에서 어린이 계급에 대한 대상을 생성합니다. 여기에서 공장에서는 관심있는 동작이 아닌 완전한 인스턴스를 대체하고 있습니다. 이로 인해 알고리즘이 아닌 완전한 시스템을 대체 할 것입니다.

코드 나 분류를 보면 차이를 이해할 수 없습니다. GOF 패턴을 올바르게 파악하려면 의도를 찾으십시오.

전략 : "알고리즘 패밀리를 정의하고 각각을 캡슐화하고 교환 가능하게 만듭니다. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 다를 수 있습니다."

공장 방법 : "객체 생성을위한 인터페이스를 정의하지만 서브 클래스가 인스턴스화 할 클래스를 결정하게하십시오. 공장 방법을 사용하면 클래스가 서브 클래스에 대한 인스턴스화를 연기 할 수 있습니다."

그리고 여기 에이 두 패턴의 의도와 차이점에 대한 정교한 설명이 있습니다. 공장 방법과 전략 설계 패턴의 차이

공장 패턴은 창조적 패턴으로 지정된 속성 (동작)으로 생성됩니다. 창조 후 런타임에 u c는 그것을 바꾸지 않습니다. 속성 (동작). 따라서 다른 속성 (동작)이 필요한 경우 u는 객체를 삭제하고 필요한 속성 (동작)으로 새 개체를 만들어야합니다. Gud가 아닙니다. 전략 패턴의 경우 U는 런타임에 속성 (동작)을 변경할 수 있습니다.

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