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实例进行了说明。单例模式是比较常用。比较简单的设计模式。相关文章推荐
- Net设计模式实例之状态模式(State Pattern)(1)
- Net设计模式实例之模板方法模式(Template Mothed Pattern)
- Net设计模式实例之观察者模式(Observer Pattern)
- Net设计模式实例之原型模式( Prototype Pattern)
- Net设计模式实例之中介者模式(Mediator Pattern)(1) 推荐
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
- Net设计模式实例之备忘录模式(Memento Pattern)(1) 推荐
- Net设计模式实例之解释器模式(Interpreter Pattern)
- Net设计模式实例之观察者模式(Observer Pattern)
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
- Net设计模式实例之组合模式(Composite Pattern)(1) 推荐
- Net设计模式实例之装饰者模式(Decorator Pattern)
- ado.net EF CodeOnly/CodeFirst设计模式实例演示
- Net设计模式实例之状态模式(State Pattern)(2)
- Net设计模式实例之外观模式(Façade Pattern)
- Net设计模式实例之模板方法模式(Template Mothed Pattern)(1) 推荐
- Net设计模式实例之命令模式(Command Pattern)
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
- Net设计模式实例之建造者模式(Builder Pattern)
- Net设计模式实例之中介者模式(Mediator Pattern)