공장 및 파이프 라인 디자인 패턴의 차이점은 무엇입니까?공장 및 파이프 라인 디자인 패턴의 차이점은 무엇입니까?
클래스를 만들 필요가 있기 때문에 각 클래스에는 텍스트 데이터를 특정 방식으로 변환하는 메서드가 필요합니다.
데이터를 변환해야하는 다른 클래스가 있습니다. 그러나 변환의 순서와 선택은이 클래스가 상속하는 기본 클래스에 따라 달라집니다.
이것은 어떻게 든 관련 파이프 라인 및/또는 공장 패턴입니까?
공장 및 파이프 라인 디자인 패턴의 차이점은 무엇입니까?공장 및 파이프 라인 디자인 패턴의 차이점은 무엇입니까?
클래스를 만들 필요가 있기 때문에 각 클래스에는 텍스트 데이터를 특정 방식으로 변환하는 메서드가 필요합니다.
데이터를 변환해야하는 다른 클래스가 있습니다. 그러나 변환의 순서와 선택은이 클래스가 상속하는 기본 클래스에 따라 달라집니다.
이것은 어떻게 든 관련 파이프 라인 및/또는 공장 패턴입니까?
팩토리는 클라이언트에 인스턴스화 논리를 노출하지 않고 개체를 만들고 공용 인터페이스을 통해 새로 만든 개체를 참조합니다. 그래서, 목표는 클라이언트가 사용하는 구체적인 유형의 제품과 그 인스턴스가 어떻게 생성되었는지를 완전히 알지 못하게 만드는 것입니다.
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();
}
을 그리고 콘크리트 공장에서 당신은 설정을 사용자 정의 셋업 파이프 라인 필터로 설정할 수 있습니다
그래서, 당신은 설치 제품에 필터 (즉, 파이프 라인)를 제공 할 수 있습니다.
공장 개체를 만들 책임이있다 :
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
, 당신은 예를 제공해 주시기 바랍니다 수 있습니까? –