2012-03-29 3 views
2

공장 및 파이프 라인 디자인 패턴의 차이점은 무엇입니까?공장 및 파이프 라인 디자인 패턴의 차이점은 무엇입니까?

클래스를 만들 필요가 있기 때문에 각 클래스에는 텍스트 데이터를 특정 방식으로 변환하는 메서드가 필요합니다.

데이터를 변환해야하는 다른 클래스가 있습니다. 그러나 변환의 순서와 선택은이 클래스가 상속하는 기본 클래스에 따라 달라집니다.

이것은 어떻게 든 관련 파이프 라인 및/또는 공장 패턴입니까?

+0

, 당신은 예를 제공해 주시기 바랍니다 수 있습니까? –

답변

2

팩토리는 클라이언트에 인스턴스화 논리를 노출하지 않고 개체를 만들고 공용 인터페이스을 통해 새로 만든 개체를 참조합니다. 그래서, 목표는 클라이언트가 사용하는 구체적인 유형의 제품과 그 인스턴스가 어떻게 생성되었는지를 완전히 알지 못하게 만드는 것입니다.

public interface IFactory // used by clients 
{ 
    IProduct CreateProduct(); 
} 

public class FooFactory : IFactory 
{ 
    public IProduct CreateProduct() 
    { 
     // create new instance of FooProduct 
     // setup something 
     // setup something else 
     // return it 
    } 
} 

모든 생성 세부 정보가 캡슐화되어 있습니다. new() 호출을 통해 인스턴스를 만들 수 있습니다. 또는 기존 샘플 FooProduct를 복제 할 수 있습니다. 설정을 건너 뛸 수 있습니다. 또는 이전에 데이터베이스에서 일부 데이터를 읽을 수 있습니다. 아무것도.

여기 파이프 라인으로갑니다. 파이프 라인의 목적은 더 큰 처리 작업을 더 작고 독립적 인 일련의 처리 단계로 나누는 것입니다. (필터). 객체 생성이 큰 작업이고 설정 단계가 독립적 인 경우 공장 내에서 설정을 위해 파이프 라인을 사용할 수 있습니다. 그러나 인스턴스화 단계는이 경우에 독립적이지 않습니다. 그것은 다른 단계 이전에 발생합니다.

public class BarFilter : IFilter 
{ 
    private IFilter _next; 

    public IProduct Setup(IProduct product) 
    { 
     // do Bar setup 

     if (_next == null) 
      return product; 

     return _next.Setup(product); 
    } 
} 

public abstract class ProductFactory : IProductFactory 
{ 
    protected IFilter _filter; 

    public IProduct CreateProduct() 
    { 
     IProduct product = InstantiateProduct(); 
     if (_filter == null) 
      return product; 

     return _filter.Setup(product); 
    } 

    protected abstract IProduct InstantiateProduct(); 
} 

을 그리고 콘크리트 공장에서 당신은 설정을 사용자 정의 셋업 파이프 라인 필터로 설정할 수 있습니다

그래서, 당신은 설치 제품에 필터 (즉, 파이프 라인)를 제공 할 수 있습니다.

0

공장 개체를 만들 책임이있다 :

ICar volvo = CarFactory.BuildVolvo(); 
ICar bmw = CarFactory.BuildBMW(); 

IBook pdfBook = BookFactory.CreatePDFBook(); 
IBook htmlBook = BookFactory.CreateHTMLBook(); 

파이프 라인은 작은 작업으로 처리를 분리하는 데 도움이 될 것입니다 : 또한 선형 파이프 라인 및 비선형 파이프 라인이

var searchQuery = new SearchQuery(); 

searchQuery.FilterByCategories(categoryCriteria); 
searchQuery.FilterByDate(dateCriteria); 
searchQuery.FilterByAuthor(authorCriteria); 

. 선형 파이프 라인을 사용하려면 범주별로 필터링 한 다음 날짜별로 그리고 작성자별로 필터링해야합니다. 비선형 파이프 라인은 우리가 이들을 동시에 또는 임의의 순서로 실행할 수있게합니다.

이 문서는 매우 잘 설명 : 데이터 변환에 관한

http://www.cise.ufl.edu/research/ParallelPatterns/PatternLanguage/AlgorithmStructure/Pipeline.htm

관련 문제