天天看點

Net設計模式執行個體之單例模式( Singleton Pattern)(2

Mail發送機制中,需要對已經發送的消息做Log。同一時間内隻允許一個程序對Txt文檔進行操作,此時使用單例模式比較合适。結構如下圖所示

WriteMailLog(string message) 方法:紀錄Mail發送日志到檔案.

_helper 、_fileLock:程式運作時,建立2個靜态隻讀的程序輔助對象

1、類MailLog

public class EmailLog

{

    private static object _helper = new object();

    private static EmailLog _instance;

    private static object _fileLock = new object();

    private EmailLog()

    {}

    public static EmailLog GetInstance()

    {

        lock (_helper)

        {

            if (_instance == null)

            {

                _instance = new EmailLog();

            }

        }

        return _instance;

    }

    /// <summary>

    /// 發送Mail日志

    /// </summary>

    /// <param name="message">資訊</param>

    public void WriteEmailLog(string message)

        string filePath = System.AppDomain.CurrentDomain.BaseDirectory + "mail.txt";

        StreamWriter sw = null;

        FileStream fs = null;

        lock (_fileLock)

            if (!File.Exists(filePath))

                fs = System.IO.File.Create(filePath);

                sw = new StreamWriter(fs, Encoding.UTF8);

                sw.WriteLine("--------------------------------------------------------------------------");

                sw.WriteLine(message);

                sw.Flush();

                sw.Close();

            else

                fs = new FileStream(filePath, FileMode.Append);

}

2、用戶端代碼

static void Main(string[] args)

    EmailLog w1 = EmailLog.GetInstance();

    w1.WriteEmailLog("發送Mail給靈動生活...");

    EmailLog w2 = EmailLog.GetInstance();

    w2.WriteEmailLog("發送Mail給James Hao...");

本文對單例模式(Singleton Pattern)的概念及其設計結構圖簡單地進行了描述,同樣也以一個Mail機制的LOG執行個體進行了說明。單例模式是比較常用。比較簡單的設計模式。

本文轉自 靈動生活 51CTO部落格,原文連結:http://blog.51cto.com/smartlife/264524,如需轉載請自行聯系原作者

繼續閱讀