.NET中的设计模式二:单件模式 选择自 lane_cn 的 Blog

news/2024/5/17 15:58:10
 

单件模式(Singleton)是一个非常简单的模式,这是我第一个理解并且能运用的模式。有时候模式的复杂程度并不在于本身,而是由于他的应用目的。最初的时候面对一个模式经常充满了困惑,一个简单的调用为什么要搞的如此复杂?为什么要建立这么多类,只是为了打开一个文件。

通常说来学习一个模式是一个接受、认可、领会的过程。接受:了解模式的结构,了解实例的意义;认可:认可该模式在实际工程中的作用和可行性;领会:将模式应用到开发过程中。

而模式的应用目的说到底无非是为了降低模块之间在时间和空间上的耦合程度,以此提高模块的复用性,降低出错的概率。

单件模式

Singleton模式是一个较为简单的模式,下面的代码就可以建立一个Singlton模式的例子,这是一个写系统日志的类。

public class LogWriter

{

    //申明一个静态的变量,类型为类本身

    private static LogWriter _instance = null;

 

    //将类的构造函数私有化,使得这个类不可以被外界创建

    private LogWriter()

    {

    }

 

    //提供静态的方法,创建类的实例

    public static LogWriter GetInstance()

    {

        if (_instance == null)

        {

            _instance = new LogWriter();

        }

        return _instance;

    }

 

    //下面实现类的其他功能

    //....

}

调用者不可以通过new的形式得到Singleton的实例,调用的例子如下:

LogWriter log = LogWriter.GetInstance();

log.Debug("hello world");

 

实际应用

很容易想象,单件模式适用于下面的情况:整个系统中某个对象是唯一的,或者是有固定数量的。比如数据库连接,配置文件,等等……

模式是一种程序员间的约定术语,语言可以成为思维的基础。有了这样的语言,一些复杂的概念就变得容易交流了。比如设计人员只要说到,某个类是一个单件模式,是一个Singleton,程序员听见以后就至少应该明白这个类的调用方式了,而不用再详细的说明。


http://www.niftyadmin.cn/n/3879839.html

相关文章

一个简明的编译器 选择自 lzmtw 的 Blog

一个简明的编译器多次看到有人提起文本表达式的计算问题,就动手整理以前的代码并加上注释。写一个简单的编译器并不是很复杂的,当中要用到些反射的知识。自已觉得,反射的使用在NET中真是无处不在,使用反射没什么效率不效率的问题&…

java main 方法的理解

文章目录 理解命令行参数用法举例IDEA工具配置参数(了解) 理解 由于JVM需要调用类的main()方法,所以该方法的访问权限必须是public,又因为JVM在执行main()方法时不必创建对象,所以该方法必须是static的,该…

时间查重方案的设计

时间查重方案的设计项目场景:需求描述:解决方案:  1.处理流程  2.周计划的时间段处理  3.时间段处理和比较总结项目场景: 项目场景:上层下发任务计划(包括周计划和日计划),每个计…

社会生活中的著名法则 选择自 muse2008 的 Blog

社会生活中的著名法则 一、马太效应 《新约?马太福音》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆…

***常见复杂SQL语句(含统计类SQL)

1、SQL统计某字段的出现次数 比如统计某个表中,姓名出现的次数:select name,count(*) from biao group by name having count(*) > 2 关键是用分组:group by,且经常和聚合函数一起使用 比如:统计用户表中的匿名字段…

C++大师Stan Lippman:我对中国程序员的忠告 www.ASPCool.com

C大师Stan Lippman:我对中国程序员的忠告作者: www.ASPCool.com 时间:2004-9-20 18:07:29 C语言的创立者,斯坦.利普曼(Stan Lippman) 9月17日参加了在北京召开的微软技术大会Tech.Ed2004并做了"The C Binding, Integrating a Static and dyn…

浅析SSL/TLS的会话流程和源码实现

浅析SSL/TLS的会话流程和源码实现一、SSL/TLS的概念二、SSL/TLS的会话交互流程(1) client_hello(2) server_hello certificate sever hello done(3) client key exchange change cipher spec encrypted handshake message(4) new session ticketchange cipher specenvrypte…

每天一道算法题(7)——在字符串中删除特定的字符

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 1.思路 最简单的。设source长n,key 长m(n>>…