您的位置:首页 > 编程语言 > C#

Net设计模式实例之单例模式( Singleton Pattern)(2

2010-01-13 09:07 483 查看

四.实例分析(Example)

1、场景

Mail发送机制中,需要对已经发送的消息做Log。同一时间内只允许一个进程对Txt文档进行操作,此时使用单例模式比较合适。结构如下图所示



WriteMailLog(string message) 方法:纪录Mail发送日志到文件.
_helper 、_fileLock:程序运行时,创建2个静态只读的进程辅助对象

2、代码

1、类MailLog
[align=left]public class EmailLog[/align]
[align=left]{[/align]
[align=left] private static object _helper = new object();[/align]
[align=left] private static EmailLog _instance;[/align]
[align=left] private static object _fileLock = new object();[/align]
[align=left] [/align]
[align=left] private EmailLog()[/align]
[align=left] {}[/align]
[align=left] [/align]
[align=left] public static EmailLog GetInstance()[/align]
[align=left] {[/align]
[align=left] lock (_helper)[/align]
[align=left] {[/align]
[align=left] if (_instance == null)[/align]
[align=left] {[/align]
[align=left] _instance = new EmailLog();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] return _instance;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] /// <summary>[/align]
[align=left] /// 发送Mail日志[/align]
[align=left] /// </summary>[/align]
[align=left] /// <param name="message">信息</param>[/align]
[align=left] public void WriteEmailLog(string message)[/align]
[align=left] {[/align]
[align=left] string filePath = System.AppDomain.CurrentDomain.BaseDirectory + "mail.txt";[/align]
[align=left] StreamWriter sw = null;[/align]
[align=left] FileStream fs = null;[/align]
[align=left] lock (_fileLock)[/align]
[align=left] {[/align]
[align=left] if (!File.Exists(filePath))[/align]
[align=left] {[/align]
[align=left] fs = System.IO.File.Create(filePath);[/align]
[align=left] sw = new StreamWriter(fs, Encoding.UTF8);[/align]
[align=left] sw.WriteLine("--------------------------------------------------------------------------");[/align]
[align=left] sw.WriteLine(message);[/align]
[align=left] sw.Flush();[/align]
[align=left] sw.Close();[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] fs = new FileStream(filePath, FileMode.Append);[/align]
[align=left] sw = new StreamWriter(fs, Encoding.UTF8);[/align]
[align=left] sw.WriteLine("--------------------------------------------------------------------------");[/align]
[align=left] sw.WriteLine(message);[/align]
[align=left] sw.Flush();[/align]
[align=left] sw.Close();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
2、客户端代码
[align=left]static void Main(string[] args)[/align]
[align=left]{[/align]
[align=left] EmailLog w1 = EmailLog.GetInstance();[/align]
[align=left] w1.WriteEmailLog("发送Mail给灵动生活...");[/align]
[align=left] EmailLog w2 = EmailLog.GetInstance();[/align]
[align=left] w2.WriteEmailLog("发送Mail给James Hao...");[/align]
[align=left]}[/align]

3、实例运行结果



五、总结(Summary)

本文对单例模式(Singleton Pattern)的概念及其设计结构图简单地进行了描述,同样也以一个Mail机制的LOG实例进行了说明。单例模式是比较常用。比较简单的设计模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息