Мне интересно, является ли следующее неправильное использование шаблона Observer.Я знаю, что субъект должен быть одним, а слушатель - многими.Однако в моем приложении может оказаться больше предметов, чем слушателей!
Игроки
Форма 1 : не требующие объяснений
DocumentCreator :Содержит фабричный метод и стратегию выбора файла из списка
Документ : содержит информацию о файле документа и метод шаблона для детей
Предложено
IErrorProne : интерфейс для вышеуказанных игроков для реализации события, превращая их в субъекты Отчетность : прослушивает объекты IErrorProne и обрабатывает ведение журнала / электронную почту
DocumentState :Это бонус, который я немного сомневаюсь.Я не совсем остановился на хорошем потоке за пределами шаблона.В настоящее время у меня есть конечный автомат внутри класса Document.Я хочу вытащить конечный автомат из класса Document в Form1, отделив их друг от друга.
public interface IErrorProne
{
public delegate void ErrorEventDelegate(
object sender,
ErrorEventArgs e
);
public event ErrorEventDelegate ReportError;
}
public abstract class Document : IDisposable, IErrorProne // My Template
{
public void Process()
{
//Error Occured
OnReportError(); // safely triggers error reporting
}
}
public class Reporting
{
static Reporting instance = new Reporting();
public void HandleError(object sender, ErrorEventArgs e);
}
public partial class Form1
{
private DocumentCreator docFactory
= new DocumentCreator(new RandomPicking());
private Document theDoc = null;
private Reporting reporting = Reporting.Instance;
private DocState state = new InitialState();
//DocState not in this example but demonstrates how it might work
public Form1()
{
docFactory.ReportError += reporting.HandleError;
theDoc.ReportError += reporting.HandleError;
docFactory.ReportError += state.HandleError;
theDoc.ReportError += state.HandleError;
}
void BackgroundWork(...)
{
using (theDoc = DocumentFactory.Instance.CreateDocument())
{
if (theDoc != null)
theDoc.Process();
}
}
}
Я предполагаю, что мой вопрос - это Anti-Pattern, если у меня есть МногиеОдин , а не Один ко многим ?