Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 警报的设计模式是什么_C#_Design Patterns - Fatal编程技术网

C# 警报的设计模式是什么

C# 警报的设计模式是什么,c#,design-patterns,C#,Design Patterns,我真的很难为我正在构建的报警器找到一个设计模式。下面是我试图做的一个人为的例子: 人们希望通过天气类型(雨、雪、太阳等)获得警报。个人还可以选择提醒方式(电子邮件、短信、松弛频道、聊天室等) 我需要:有一门课,它会接受天气类型。然后它检索所有关心天气类型的人。然后它循环遍历所有人并向他们发送警报(基于该人的警报类型首选项) 这是我的基本提纲,但似乎应该做得“更好”: 你可以用 像这样: public class Alerter<T> { private readonly We

我真的很难为我正在构建的报警器找到一个设计模式。下面是我试图做的一个人为的例子:

人们希望通过天气类型(雨、雪、太阳等)获得警报。个人还可以选择提醒方式(电子邮件、短信、松弛频道、聊天室等)

我需要:有一门课,它会接受天气类型。然后它检索所有关心天气类型的人。然后它循环遍历所有人并向他们发送警报(基于该人的警报类型首选项)

这是我的基本提纲,但似乎应该做得“更好”:

你可以用

像这样:

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);
        }
    }
}
公共类警报程序
{
私有只读WeatherType _WeatherType;
公共报警器(WeatherType WeatherType)
{
_weatherType=weatherType;
}
公共void SendAlerts()
{
var people=PersonRepository.GetPeople(_weatherType);
foreach(人对人)
{
var e=(T)Activator.CreateInstance(typeof(T));
e、 SendToPerson(个人,天气类型);
}
}
}
您还可以使用其他通用类型替换天气类型。

您可以使用

像这样:

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);
        }
    }
}
公共类警报程序
{
私有只读WeatherType _WeatherType;
公共报警器(WeatherType WeatherType)
{
_weatherType=weatherType;
}
公共void SendAlerts()
{
var people=PersonRepository.GetPeople(_weatherType);
foreach(人对人)
{
var e=(T)Activator.CreateInstance(typeof(T));
e、 SendToPerson(个人,天气类型);
}
}
}

您还可以将天气类型替换为其他通用类型。

这听起来像是发布和订阅模式。有许多方法可以实现上述模式,这里有一个链接可以让您开始(但在您决定哪种方法最适合您之前,一定要先看看其他方法):


您可能会将其与事件聚合器结合起来-

这听起来像是发布和订阅模式。有许多方法可以实现上述模式,这里有一个链接可以让您开始(但在您决定哪种方法最适合您之前,一定要先看看其他方法):


您可以将其与事件聚合器结合使用-

如果需要讨论算法或设计模式,您可能应该将问题发布到programmers.stackexchange。com@Steve当提到其他网站时,指出@gnat绝对正确,这是我的错,这通常是有帮助的,但是我被一篇关于程序员的元帖子吸引住了,以至于我完全忘记了我投票决定结束这篇文章,我在《程序员》上发表了这样一篇文章:如果你需要讨论一个算法或设计模式,也许你应该把这个问题发布给程序员。stackexchange。com@Steve参考其他网站时,指出@gnat绝对正确,这是我的错,这一点通常是有帮助的,但是我被从一篇关于程序员的元帖子中带走了,以至于我完全忘记了。我投票结束了这篇文章,我在程序员中发布了:你可能是对的,但是我不知道如何将上面的代码改编成它——它不是已经发布到订阅服务器了吗?是的,它似乎正在发布到你的订阅服务器列表中。但要完成此模式,您可能需要将事件引发/侦听单独包含到当前警报中。下面是一个我发现的更详细的示例:您可能是对的,但我不确定如何将上面的代码改编成它-它不是已经发布到订阅服务器了吗?是的,它似乎正在发布到您的订阅服务器列表中。但要完成此模式,您可能需要将事件引发/侦听单独包含到当前警报中。下面是一个我发现的更详细的例子:你不会因为需要触发的警报类型(电子邮件、短信等)而被困在做一个大的切换语句吗?你不会因为需要触发的警报类型(电子邮件、短信等)而被困在做一个大的切换语句吗?