실제로 프로세스에 직접 임베드하는 대신 작업에 팩토리를 사용할 수도 있습니다.
이
public class Process {
private readonly List<Func<Process, BaseTask>> TaskFactories
= new List<Func<Process, BaseTask>>();
public RegisterTask(Func<Process, BaseTask> taskFactory)
{
TaskFactories.Add(taskFactory);
}
public IEnumerable<Task> CreateTasks() {
return TaskFactories.Select(f => f(this)).ToArray();
//ToArray used to ensure all tasks created here and now.
}
}
당신은 다음과 같은 작업을 쓸 수 있도록 :
public class MyTask : BaseTask {
public MyTask(Process p) {
/* grab parameters from process here */
}
}
을 그리고 당신이 작업을 등록 할 수 있습니다, 주어진이 같은 Process p
:
그것의 가장 단순한 형태는 대리인이 될 것입니다
public void RegisterSomeTask(Process p) {
p.RegisterTask((process) => new MyTask(p));
}
이 또한 멀리 내 의견으로는, 인 Initialize
방법에 대한 필요성과 수행, 그것은 초기화되지 않은이 할 수있는 이상적인 패턴의 적이 있기 때문에 당신의 국가 관리가 절대적으로 치열하지 않으면 오류가 발생할 수 있습니다.