博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Net设计模式实例之单例模式( Singleton Pattern)(2
阅读量:6869 次
发布时间:2019-06-26

本文共 1676 字,大约阅读时间需要 5 分钟。

、场景

Mail
发送机制中,需要对已经发送的消息做
Log
。同一时间内只允许一个进程对
Txt
文档进行操作,此时使用单例模式比较合适。结构
如下图所示
 
WriteMailL
og(string message) 
方法:纪录
Mail
发送日志到文件
.
_helper 
_fileLock
:程序运行时,创建
2
个静态只读的进程辅助对象

、代码

1
、类
MailL
og
public
 class EmailLog
{
    private static object
 _helper = new object
();
    private static EmailLog
 _instance;
    private static object
 _fileLock = new object
();
 
    private
 EmailL
og()
    
{}
 
    public static EmailLog
 GetInstance()
    
{
        lock
 (_helper)
        
{
            if
 (_instance == null
)
            
{
                
_instance = new EmailLog
();
            
}
        
}
        return
 _instance;
    
}
 
    /// <summary>
    /// 
发送Mail
日志
    /// </summary>
    /// <param name="message">
信息
</param>
    public void
 WriteEmailL
og(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);
                
sw = new StreamWriter
(fs, Encoding
.UTF8);
                
sw.WriteLine("--------------------------------------------------------------------------"
);
                
sw.WriteLine(message);
                
sw.Flush();
                
sw.Close();
            
}
        
}
    
}
}
 
2
、客户端代码
static
 void Main
(string
[] args)
{
    EmailLog
 w1 = EmailLog
.GetInstance();
    
w1.WriteEmailL
og("
发送Mail
给灵动生活..."
);
    EmailLog
 w2 = EmailLog
.GetInstance();
    
w2.WriteEmailL
og("
发送Mail
James Hao..."
);
}

、实例运行结果

本文对单例模式(
Singleton Pattern
)的概念及其设计结构图简单地进行了描述,同样也以一个
Mail
机制的
LOG
实例进行了说明。单例模式是比较常用。比较简单的设计模式。
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/264524,如需转载请自行联系原作者
你可能感兴趣的文章
multi-voltage design apr
查看>>
快速生成R语言报告(markdown+Rstudio)
查看>>
WindowsServer2003中IIS支持php的配置
查看>>
原型链、prototype、_proto_那些事
查看>>
Centos 6.4使用本地yum源
查看>>
RedHat 7 静默安装Oracle 12c
查看>>
技术人玩转iPhone4S iOS 5.1.1完美越狱
查看>>
在敏捷测试中如何设计用例
查看>>
使用JSOM创建一个SharePoint网站计数器
查看>>
老硬盘华丽变身高速硬盘
查看>>
IT公司规模对技术人员知识增长率的影响
查看>>
由日企衰败联想到的运维管理问题
查看>>
Outlook中轻松添加LDAP服务
查看>>
线上咨询交易火爆 新模式还是新机遇?
查看>>
比较使用sql*loader的直接加载方式和传统加载方式的性能差异
查看>>
HAProxy Nginx LVS Apache总结篇
查看>>
BlackBerry Localization sample (1)
查看>>
类模版和函数模版需要注意的
查看>>
用 Tornado 实现简单的在线代理
查看>>
函数指针和指针函数
查看>>