- 实现阶段进阶:
如果查看书本上单例模式,简单一句话,都是如何实现。
并且实现务必有 Class.GetInstance() 的语句。这种方式的缺点还一个就是代码的可读性受影响; 原因区别于非单例的代码new Class();
并且对于库的引用者的视角需要明白单例一说。
那么如何解决这个问题呢?
封装
(使用SingleInterface 封装SingleTon)
public class SingleTon
{
private static int fieldNumber;
public int FieldNumber
{
get { return fieldNumber; }
set { fieldNumber = value; }
}
private SingleTon()
{
}
private static SingleTon instence;
public static SingleTon GetInstance()
{
if (instence == null)
{
instence = new SingleTon();
}
return instence;
}
public void MethodA()
{
Console.WriteLine("SingleTon :{0}", fieldNumber++);
}
}
public class SingleInterface
{
private SingleTon singleClent;
public SingleInterface()
{
}
public void Initialize()
{
singleClent = SingleTon.GetInstance();
}
public void MethodA()
{
singleClent.MethodA();
}
}
- 实用阶段
如果不做处理 这种方式只能应用于,单进程中;
唯有将所有引用单例的库或应用 只能运行与一个可执行文件中。原因:操作系统给每个进程分配单独的内存块;
如果EXEa.exe和EXEb.exe 通过引用的方式加载单例库,不能实现单例的作用。
解决办法:
模式结合;结合SOA; 将单例独立成服务。