我经过长时间的休息后开始编程。按照教程,遇到了Singleton Design Pattern。我想知道在什么样的情况下使用单例模式。特别是在游戏开发中。
答案 0 :(得分:3)
Singleton模式可能是很久以前Gang of Four提出的最着名和最滥用的模式。
许多开发人员现在将单身人士视为一种反模式。 sinetons带来的最重要的问题可能是允许某些不允许它的类的全局访问。简而言之,它可能违反封装。与此同时,并不是因为这种模式很糟糕,而是它的误用。
强烈建议您查看Game Programming Patterns以获取更多信息。对于任何级别的程序员来说,这本书都是一本很好的书。
请注意,服务定位器模式作为作者建议的替代方案之一,有争议的是反模式。我仍然怀疑如何避免单身人士,但我还没有找到解决方案。
答案 1 :(得分:3)
Singleton设计模式解决了所有这些问题。使用Singleton设计模式,您可以:
答案 2 :(得分:3)
Singleton Patern。 想象一下你有这两个类的情况:
public class MessageBuilder {
public MessageBuilder() { }
public string BuildMessage(string message) {
return message;
}
}
public class MessageDisplayer
{
public MessageDisplayer() { }
public void DisplayErrorMessage(string message)
{
MessageBuilder builder = new MessageBuilder();
Console.Write(builder.BuildMessage("Error message"));
}
public void DisplaySuccessMessage(string message)
{
MessageBuilder builder = new MessageBuilder();
Console.Write(builder.BuildMessage("Success message"));
}
}
一个类包含一些用于构建消息的逻辑,另一个用于显示消息。但正如您在类MessageDisplayer
的方法中看到的那样,我们必须创建两次MessageBuilder
的实例。让我们重写一下,因为Singleton Patern:
public class MessageBuilder
{
private static readonly MessageBuilder instance = new MessageBuilder();
private MessageBuilder() { }
public static MessageBuilder Instance
{
get
{
return instance;
}
}
public string BuildMessage(string message)
{
return message;
}
}
public class MessageDisplayer
{
public MessageDisplayer() { }
public void DisplayErrorMessage(string message)
{
MessageBuilder builder = MessageBuilder.Instance;
Console.Write(builder.BuildMessage("Error message"));
}
public void DisplaySuccessMessage(string message)
{
MessageBuilder builder = MessageBuilder.Instance;
Console.Write(builder.BuildMessage("Success message"));
}
}
现在你只会创建MessageBuilder
一次的实例,并且在下一次调用属性Instance
时它不会创建新实例,但只返回一个存储在私有变量{{1 }}。
答案 3 :(得分:2)
Singleton(并且它不与C#绑定,它是一个OO设计模式)是您希望在整个应用程序中只允许创建一个类的一个实例。 有关单身人士和游戏编程模式的详细信息here。