2011-10-09 4 views
10

대 AbstractFactory 난 그냥 Bridge 패턴과 그 의도를 배웠습니다.브리지 패턴

하지만 왜 AbstractFactory이 같은 일을 할 수 없었습니까?

가 나는 AbstractFactory가 특정 브리지를 만들 수 있다는 것을 알고 있지만, 내 질문은 추상화와 구현을 분리하는 대신 AbstractFactoryBridge의 사용에 관한 것이다.

AbstractFactoryBridge 패턴의 실제 차이점을 설명해 주시겠습니까?

답변

4

먼저 내가 읽은 것에서 다리 패턴을 벗어나면 클래스와 그 기능이 자주 달라지는 경우가 많습니다. 클래스 자체는 추상화로서 클래스의 구현 및 동작으로 간주 될 수 있습니다.

한편, 추상 팩토리는 구체적인 클래스를 지정하지 않고 관련 객체 또는 종속 객체 그룹을 생성하기위한 인터페이스를 제공합니다. 그들의 구현 관심사.

그래서 나는 사과를 오렌지와 비교하고 있습니다. 어쩌면 그것이 혼란이 어디에서 오는 것인지 알 수 있습니다. 그들은 여러 가지 문제를 해결하기위한 것입니다.

나에게 연산은 java에서 메서드를 암시하므로 연산은 추상화에 의해 정의되거나 선언되지만 클래스 자체에서 구현됩니다. 그렇습니다. 추상화는 작업이 동작까지 수행 할 수있는 것을 선언하는 것일 뿐이지 만 실제 구현은 클래스에서 수행됩니다. 또한 Abstract Factory도 정확합니다.

브릿지에 대한 정의 부분은 하나의 추상화에 따라 달라지는 추상화 집합을 가질 수 있다고 생각합니다.

디자인 패턴은 추상 작업 집합에 대한 몇 가지 구현이 가능한 추상 패턴 집합을 사용하는 클래스를 나타 내기 위해 추상화라는 단어를 사용합니다.

자세한 내용은 다음 링크를 참조하십시오 :

Using Abstractions and the Bridge Pattern in Java

Wikipedia: Bridge_Pattern

Bridge Pattern in Java

The Bridge Pattern Design Pattern

+1

이 설명에 감사드립니다. Bridge가 있으면 모든 원시 연산은 추상화 자체가 아닌 구현 자에 의해 구현 될 것으로 예상됩니다.반면에 AbstractFactory를 사용하면 오브젝트 (예 : Bridge Pattern의 추상화 측면에 포함 된 오브젝트) 만 생성되지만이 패턴은 모든 기본 연산을 추상화 측면에서 구현해야한다는 것을 절대로 기대하지 않습니다. 모든 기본 작업에 대해 항상 objectCreatedByFactory.doSomething()과 같은 위임 – Mik378

1

예. 그들은 비슷하다. AF는 객체의 패밀리를 작성하는 데 사용됩니다. Where as Bridge는 동작에 대해 더 많이 알고 있으며 알고리즘과 플랫폼 간의 느슨한 결합을 허용합니다.

예 : Ping 및 Traceroute를 사용하여 네트워크 진단 프로그램을 개발한다고 가정하면 다른 플랫폼의 명령이 다릅니다. 추상 팩토리를 사용하여 임의의 플랫폼에 대해 ping 또는 traceroute의 인스턴스를 얻을 수 있습니다. 거기서 끝나지 않습니다. Bridge를 사용하면 AF에서 반환 한 ping 및 trace 명령을 사용하여 더 높은 수준의 알고리즘을 개발할 수 있습니다. 플랫폼에 따라 ping 및 traceroute의 다른 순서를 사용할 수있는 알고리즘은 브리지 패턴을 사용하여 플랫폼 특정 구현 세부 사항에서 추출 할 수 있습니다.

1

는 약간의 차이가 있고 우리는 둘 다 비교할 수 없습니다.

  1. 추상 공장은 객체 생성을 다루는 창조적 디자인 패턴입니다. 다리 클래스 구조와 구성을 다루는 구조 설계 패턴이다.

  2. 에서 추상화 및 구현은 독립적으로 달라집니다. 그러나 추상 팩토리에서 추상화 (인터페이스)를 변경하면 클라이언트를 변경해야합니다.

abstract_factory 패턴 사용 사례 :

  1. 시스템이 제품의 여러 패밀리를 작성해야하거나 구현 세부 사항을 노출하지 않고 제품의 라이브러리를 제공합니다.

검사 목록 :

  1. "플랫폼 독립성"과 창조 서비스 고통의 전류 소스입니다 여부를 결정합니다.
  2. "플랫폼"대 "제품"의 매트릭스를 매핑하십시오.
  3. 제품 당 팩토리 메소드로 구성된 팩토리 인터페이스를 정의합니다.
  4. 는 new 연산자에 대한 모든 참조를 캡슐화 각 플랫폼에 클래스를 파생 공장을 정의합니다.
  5. 는 클라이언트가 새에 대한 모든 참조를 은퇴하고, 제품의 객체를 생성하는 팩토리 메소드를 사용해야합니다.

    1. 하면 런타임이 구현의 결합을 원하는 커플 인터페이스와 다양한 구현에서
    2. 당신이 클래스의 확산이 :

    bridge 패턴 : 때

    그것을 사용

  6. 여러 객체 간의 구현을 공유 할
  7. ,
  8. 당신은 엄마에 필요 p 직교 클래스 계층 구조.

관련 SE 질문 :

Does the Bridge Pattern decouples an abstraction from implementation?

What is the basic difference between the Factory and Abstract Factory Patterns?

다양한 디자인 패턴에 대한 깊이있는 이해를위한이 journaldev 글을보고 sourcemaking 기사 되세요.