패턴을 배우려고하는데 공장 패턴이 어떤 클래스를 인스턴스화할지 결정하는 방법이나 위치를 결정하는 데 주저합니다. 팩토리를 호출하고, XML 설정 파일을 전송하여 어떤 유형의 조치를 취할지를 결정하는 어플리케이션이 있다면, 설정 파일을 해석하기위한 로직은 어디에서 발생합니까?팩토리 패턴 : 구체적인 팩토리 클래스 인스턴스화를 결정 하시겠습니까?
공장 출고
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace myNamespace
{
public abstract class SourceFactory
{
abstract public UploadSource getUploadSource();
}
public class TextSourceFactory : SourceFactory
{
public override UploadSource getUploadSource()
{
return new TextUploadSource();
}
}
public class XmlSourceFacotry : SourceFactory
{
public override UploadSource getUploadSource()
{
return new XmlUploadSource();
}
}
public class SqlSourceFactory : SourceFactory
{
public override UploadSource getUploadSource()
{
return new SqlUploadSource();
}
}
}
클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace myNamespace
{
public abstract class UploadSource
{
abstract public void Execute();
}
public class TextUploadSource : UploadSource
{
public override void Execute()
{
Console.WriteLine("You executed a text upload source");
}
}
public class XmlUploadSource : UploadSource
{
public override void Execute()
{
Console.WriteLine("You executed an XML upload source");
}
}
public class SqlUploadSource : UploadSource
{
public override void Execute()
{
Console.WriteLine("You executed a SQL upload source");
}
}
}
패턴을 학습하고있는 것으로 이해합니다. 프로덕션 환경에서는 공장 및 기타 작성 패턴을 구현하는 Inversion of Control Container를 사용하는 것이 좋습니다. C# 세계에서 Castle-Windsor는 일반적인 IOC 컨테이너입니다. 아래의 @peter 노트에서, 공장 로더는 설정을 해석 할 책임이 있습니다. 종종 이것은 "이 인터페이스에서이 구체적인 클래스를로드"의 형태를 취합니다. – Rob
@Rob : 프로그래머 (또는 프로그래머)가 재사용 가능하고 유연하며 느슨하게 결합 된 강력한 응집력있는 소프트웨어를 설계하는 곳을 언제 알 수 있습니까? 그것은 oop가 아니며 패턴이 아닙니다. IOC이기 때문입니다. 벅은 어디에서 멈 춥니 까? –
IOC는 생성 패턴을보다 쉽게 구현할 수있는 도구입니다. 개인적으로, 나는 누군가가 내 일을 더 쉽게 해주는 소프트웨어를 많이 썼을 때 그것을 좋아한다. – Rob