드디어 몇 가지 기본 패턴을 배우기 위해 진지하게 시작했습니다 (커리어의 아주 늦었지만 그것은 다른 이야기입니다). Factory Pattern과 Abstract Factory의 차이점을 살펴보세요.

이 두 패턴의 주요 차이점은 무엇입니까?

Factory Method는 상속을 통해 객체를 생성하고 Abstract Factory는 개체 구성을 통해 이루어 지지만 실제적인 관점에서 볼 때 각각의 작동 방식을 정확히 시각화하는 데 여전히 어려움이 있습니다.

댓글

  • stackoverflow.com/questions/1001767/ …
  • 명확하게 말하자면 " Factory Method " " Factory Pattern "? Gang of Four 패턴에 대해 이야기하고 있다면 Factory Pattern은 없지만 Abstract Factor가 있습니다. y and Factory Method.
  • Yes-Factory Method.
  • 공평하게 말하면 두 구문은 꽤 일반적으로 서로 바뀝니다.
  • 아, Factory Method. new가 ' ta 메서드 (일부 – 인정할 수있는 일반적인 – 개체 시스템)가 아니라는 사실에 대한 해결 방법입니다.

답변

공장 방법 는 일반적으로 동일한 루트 인터페이스를 사용하여 각 케이스가 다른 클래스를 반환하는 switch 문으로 분류되므로 호출 코드가 구현에 대한 결정을 내릴 필요가 없습니다.

신용 카드 유효성 검사기 팩토리를 생각해보십시오. 카드 유형별로 다른 유효성 검사기를 반환합니다.

public ICardValidator GetCardValidator (string cardType) { switch (cardType.ToLower()) { case "visa": return new VisaCardValidator(); case "mastercard": case "ecmc": return new MastercardValidator(); default: throw new CreditCardTypeException("Do not recognise this type"); } } 

Abstract Factory 는 하나의 인터페이스에서 파생 된 여러 개의 구체적인 팩토리 클래스 (팩토리 메서드가 아님)가있는 곳으로, 다른 메서드에서 다양한 유형을 반환 할 수 있습니다.

다른 클래스를 가진 체스 게임 관리자를 생각해보십시오. 각 변형 규칙 세트에 대해.

public class StandardChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new StandardChessBoardMapper(); } public IKingMover GetKingMover() { return new StandardChessKingMover(); } public IMoveClock GetMoveClock() { return new StandardMoveClock(); } } public class HexagonalChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new HexagonalChessBoardMapper(); } public IKingMover GetKingMover() { return new HexagonalChessKingMover(); } public IMoveClock GetMoveClock() { return new StandardMoveClock(); } } public class SpeedChessRulesFactory : IChessRulesFactory { public IBoardMapper GetBoardMapper() { return new StandardChessBoardMapper(); } public IKingMover GetKingMover() { return new StandardChessKingMover(); } public IMoveClock GetMoveClock() { return new SpeedChessMoveClock(); } } 

추상 팩토리 는 Strategy와 매우 유사하게 Factory Method를 사용하여 자주 선택되지만 “자체 패턴이므로 결합 할 필요가 없습니다.

Comments

  • Factory 방법에 대한 설명이 맞습니까? '에 대한 " 팩토리 메소드 패턴은 상속에 의존합니다. 객체 생성은 다음과 같은 하위 클래스에 위임 되기 때문입니다. 객체를 생성하는 팩토리 메소드를 구현합니다 ". 따라서 예제는 Static Factory와 비슷합니다.
  • @SerG 공평하게도 당신은 ' 위키 백과에서 그 인용구를 찾았습니다. 3 년 전에는 다르게. 현재 위키 백과 페이지가 여러 곳에서 모순된다고 주장하지만 ' 그것을 구분하는 데 관여하고 싶지는 않습니다. 돌이켜 보면 제가 여기에 제공 한 ' 예제는 매개 변수화 된 팩토리 메서드로 알려진 특정 종류의 팩토리 메서드라는 것을 인정합니다. 하지만 Factory Method와 Abstract Factory의 차이점은 모든 유형의 Factory Method에 적용됩니다.
  • 인용문 과 동일한 진술이 있습니다. GoF " 디자인 패턴 ". 매개 변수화 된 FM도 여기에 설명되어 있습니다.
  • 중요한 부분은 특정 상황에 따라 공장에서 발신자에게 적절한 개체를 제공하고 발신자는 제공하지 않는다는 것입니다. ' 객체의 클래스가 정확히 무엇인지 알 필요가 없으며 ' 객체가 인터페이스를 지원하는 한 특정 객체가 어떻게 선택되었는지 알 필요가 없습니다. 호출자는 알고 있습니다.
  • 귀하의 예제가 일반적인 팩토리 메서드 패턴이 아니라 매개 변수화 된 팩토리 메서드라는 일부 전문화라는 점을 답변에 분명히 명시해야합니다. 그리고 지금 당장 잘못된 것이기 때문에 전형적인 팩토리 방법의 정의에 대해 써주세요. 방금 팩토리 메서드 패턴에 대해 배우고 있었는데 모든 것을 이해 한 다음 팩토리 메서드 패턴을 다른 것으로 보여주는 답을 읽었고 혼란 스러웠습니다. 해당 예제가 일반적인 공장 방법 패턴이 아니라는 정보는 없습니다. 코멘트에 의견을 제시해 주신 SerG에게 감사드립니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다