C#. 나는 기본 클래스가 FileProcessor
라고 있습니다 일부 디자인 패턴 제안 필요
class FileProcessor {
public Path {get {return m_sPath;}}
public FileProcessor(string path)
{
m_sPath = path;
}
public virtual Process() {}
protected string m_sath;
}
는 지금은 다른 클래스
ExcelProcessor
&
PDFProcessor
로 만들 싶습니다 경로로 끝나는 경우
PDFProcessor
에 대한
class Excelprocessor: FileProcessor
{
public void ProcessFile()
{
//do different stuff from PDFProcessor
}
}
같은, 파일은 엑셀 "입니다. xlsx "이고 pdf가".pdf "로 끝나면. 나는 ProcessingManager
클래스 수 :
class ProcessingManager
{
public void AddProcessJob(string path)
{
m_list.Add(Path;)
}
public ProcessingManager()
{
m_list = new BlockingQueue();
m_thread = new Thread(ThreadFunc);
m_thread.Start(this);
}
public static void ThreadFunc(var param) //this is a thread func
{
ProcessingManager _this = (ProcessingManager)var;
while(some_condition) {
string fPath= _this.m_list.Dequeue();
if(fPath.EndsWith(".pdf")) {
new PDFProcessor().Process();
}
if(fPath.EndsWith(".xlsx")) {
new ExcelProcessor().Process();
}
}
}
protected BlockingQueue m_list;
protected Thread m_thread;
}
나는 가능한 모듈로이을의 난은 ".DOC"처리를 추가하고 싶습니다 예를 들어 가정하자하려고를, 나는 수표를해야 할 것 관리자 내부에 다른 DOCProcessor
을 구현하십시오. ProcessingManager
의 수정없이 어떻게해야합니까? 내 매니저가 충분히 괜찮은지 모르겠다. 내 의견을 말해 달라.
[FileProcessorExtension(".doc")]
public class DocProcessor()
{
}
이 그런 다음 처리 관리자가 누구 FileProcessorExtension 특성 확장 일치하는 프로세서를 찾을 수 있고, 반사적으로 인스턴스화 :
[솔리드] (http://en.wikipedia.org/wiki/SOLID_ (object-oriented_design)) 디자인 패턴. – Brian
단순한 디자인 패턴도 사용할 수 있지만 관리자에게 새 옵션을 추가해야합니다. –
당신은 추상적 인 공장 디자인 패턴을보실 수 있습니다 http://www.oodesign.com/abstract-factory-pattern.html – terrybozzio