У меня есть класс, который облегчает обнаружение устройств HID
, когда устройство обнаружено, event
поднят и впоследствии обнаружен другим классом, который в конечном итоге будет отвечать за создание object
для представления HID
устройство. creation class
создает собственный event
с недавно созданным объектом HID
.Шаблоны проектирования для создания объекта времени выполнения
Имея это в виду, у меня есть несколько дизайнерских запросов:
1) Я сделал некоторые исследования в «наилучшей практики» с относительно создания неизвестного числа или типа объект во время выполнения, для которого часто задается шаблон проектирования
Abstract Factory
. Создает ли шаблон дизайнаAbstract Factory
сценарий, который у меня есть, или есть что-то еще, что я должен делать?2) Класс
HidFinder
вызывает событие, чтобы уведомить заинтересованных лиц (в основном классHidCreator
) о том, что устройство было обнаружено. Затем классHidCreator
вызывает событие, содержащее только что созданное устройствоHID
. Это похоже на правильный метод, однако подтверждение в любом случае было бы оценено.
Ниже приведен пример представленного кода.
public class HidFinder
{
public event EventHandler<HidFoundArgs> HidFoundHandler;
private void DeviceAdded(object sender, EventArrivedEventArgs e)
{
OnHidFoundHandler(new HidFoundArgs());
}
protected virtual void OnHidFoundHandler(HidFoundArgs e)
{
EventHandler<HidFoundArgs> handler = this.HidFoundHandler;
if (handler != null)
{
handler(this, e);
}
}
}
public class HidCreator
{
private readonly HidFinder hidFinder;
public event EventHandler<IHidDevice> HidDeviceCreatedHandler;
public HidCreator(HidFinder hidFinder)
{
this.hidFinder = hidFinder;
this.hidFinder.HidFoundHandler += HidFinderOnHidFoundHandler;
}
private void HidFinderOnHidFoundHandler(object sender, HidFoundArgs hidFoundArgs)
{
// Create a new HID
var newHidDevice = Factory.CreateMethod();
OnHidDeviceCreatedHandler(newHidDevice);
}
protected virtual void OnHidDeviceCreatedHandler(IHidDevice e)
{
EventHandler<IHidDevice> handler = this.HidDeviceCreatedHandler;
if (handler != null)
{
handler(this, e);
}
}
}