Singleton:两全其美(希望实例化类)
本文关键字:实例化 希望 两全其美 Singleton | 更新日期: 2023-09-27 18:00:09
使用此代码:
public class MyClass
{
public int Number;
private static MyClass myClass;
...
public MyClass GetInstance()
{
...
return myClass;
}
}
我有没有办法支持以下两种说法?
MyClass.Number = 5;
其中MyClass检索用于存储Number 值的静态类
和
MyClass myLocalClass = new MyClass();
或者是一种脱离Singleton设计模式的替代方案,因为我也希望能够创建一个实例。
谢谢你的光临!
您想要的是MonoState模式。我将引用Robert C.Martin 的Agile Principles, Patterns, and Practices in C#
MONOSTATE模式是实现奇异性的另一种方式。它有效通过完全不同的机制。
第一个测试函数简单地描述了一个对象,其x变量可以设置和检索。但是第二个测试案例显示同一类的实例表现得好像它们是一体的。如果你设置将一个实例上的x变量转换为特定值,您可以检索通过获取不同实例的x变量来获取该值。它就像尽管这两个实例只是同一个实例的不同名称对象
因此,您可以实例化2个或多个类,但它们将共享相同的值。
下面是一个实现示例:
public class Monostate
{
private static int itsX;
public int X
{
get { return itsX; }
set { itsX = value; }
}
}
还有测试,所以你可以看到它是如何使用的:
using NUnit.Framework;
[TestFixture]
public class TestMonostate
{
[Test]
public void TestInstance()
{
Monostate m = new Monostate();
for (int x = 0; x < 10; x++)
{
m.X = x;
Assert.AreEqual(x, m.X);
}
}
[Test]
public void TestInstancesBehaveAsOne()
{
Monostate m1 = new Monostate();
Monostate m2 = new Monostate();
for (int x = 0; x < 10; x++)
{
m1.X = x;
Assert.AreEqual(x, m2.X);
}
}
}
您想要的只是一个静态成员。根据定义,Singleton只有一个实例,这意味着你不能显式地实例化它
你的课应该是
public class MyClass
{
public static int Number;
}
但是,除非您也有一些非静态成员,否则创建类的多个实例是毫无意义的。