我真的很难为我正在构建的Alerter提出设计模式。这是我正在尝试做的一个人为的例子:
一个人想要根据天气类型(雨,雪,太阳等)发出警报。一个人也可以选择警报方法(电子邮件,短信,闲聊频道,聊天室等)。
我需要:拥有一个吸收天气类型的课程。然后它检索所有关心该天气类型的人。然后它遍历所有人并向他们发送警报(基于人的警报类型偏好)。
这是我的基本大纲,但似乎应该做得更好“
public class Alerter
{
private readonly WeatherType _weatherType;
public Alerter(WeatherType weatherType)
{
_weatherType = weatherType;
}
public void SendAlerts()
{
var people = PersonRepository.GetPeople(_weatherType);
foreach (Person person in people)
{
switch (person.AlertType)
{
case Email:
var e = new EmailAlerter();
e.SendToPerson(person, _weatherType);
return;
case SMS:
var s = new SmsAlerter();
s.SendToPerson(person, _weatherType);
return;
}
}
}
}
答案 0 :(得分:1)
您可以使用generics
像这样:
public class Alerter<T>
{
private readonly WeatherType _weatherType;
public Alerter(WeatherType weatherType)
{
_weatherType = weatherType;
}
public void SendAlerts()
{
var people = PersonRepository.GetPeople(_weatherType);
foreach (Person person in people)
{
var e = (T)Activator.CreateInstance(typeof(T));
e.SendToPerson(person, _weatherType);
}
}
}
您也可以将天气类型替换为其他通用类型。
答案 1 :(得分:1)
这听起来像是一个发布&amp;订阅模式。有很多方法可以实现上述模式,这里有一个启动你的链接(但在你决定哪个最适合你之前一定要看看别人): https://msdn.microsoft.com/en-us/library/ms752254(v=vs.110).aspx
您可以将其与事件聚合器 - https://msdn.microsoft.com/en-us/library/ff921122.aspx
结合使用