单例模式之见解-设计模式
说起来工作也几年,突然发现比较少去写日记做总结,因此在2013年开始之际,决定现在开始每隔一段时间上来这里写写,帮助自己总结。
这次就先从设计模式开始,说起设计模式我想很多码农都知道了,就不在详细说,但是这里单说说我常见到的几种,现在以单例开始吧。
说起单例模式,熟悉了吧,在一些项目中,比如读取配置文件中会用到,或者在控制依赖反转中也会用到,自己想了下写了个,C#代码如下:
/// <summary> /// 单例模式:控制继承、构造、静态实现 /// </summary> public sealed class SinglePattern { private static readonly SinglePattern instance; private SinglePattern() { } static SinglePattern() { instance = instance ?? new SinglePattern(); } public static SinglePattern getInstance { get { return instance; } } }
首先代码用了关键字sealed,阻止继承实现后New实例化;构造中在上private,表示外部不可以访问,只能在内部new,静态构造保证实例化时先对静态对象赋值;再定义私有静态对象这里直接new实例化;通常项目中我们也就这样做了,这个比起来使用对象双重锁定代码简洁多了,用了.net的static静态初始化特性来解决。不过这也有问题,就是机制是可以保证只有一个对象,但是在实例化时对象时没有加以控制,所以后来有些人推荐不使用静态字段,而把实例化直接交给一个内部类来到达延迟初始化的作用,C#代码如下:
/// <summary> /// 单例模式:控制继承、构造、静态、内部类延迟初始化实现 /// </summary> public sealed class SinglePattern01 { private SinglePattern01() { } public static SinglePattern01 getInstance { get { return CreateInstance.SinglePattern; } } private class CreateInstance { static CreateInstance() { } internal static readonly SinglePattern01 SinglePattern = new SinglePattern01(); } }
在上面的代码中,实例化这个工作直接交给一个私有的内部类CreateInstance去执行,这个内部类是私有外部无法访问,使用静态构造加以控制静态字段New.只有去到达延迟初始化。全部代码如下:
/// <summary> /// 单例模式:控制继承、构造、静态实现 /// </summary> public sealed class SinglePattern { private static readonly SinglePattern instance ; private SinglePattern() { } static SinglePattern() { instance = instance ?? new SinglePattern(); } public static SinglePattern getInstance { get { return instance; } } } /// <summary> /// 单例模式:控制继承、构造、静态、内部类延迟初始化实现 /// </summary> public sealed class SinglePattern01 { private SinglePattern01() { } public static SinglePattern01 getInstance { get { return CreateInstance.SinglePattern; } } private class CreateInstance { static CreateInstance() { } internal static readonly SinglePattern01 SinglePattern = new SinglePattern01(); } }
当然除了这样做外还可以使用对象的双重锁定来实现,在这里就没有提供了。
这个单例模式就到这里,以后会加以说明下!这里再整理了一下代码,提供下载!
这几天更新了下,把日志也加进来,听过配置文件来是否启用配置文件,当然还有不好的地方。项目代码提供下载!