惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
宝玉的分享
宝玉的分享
美团技术团队
量子位
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
IT之家
IT之家
爱范儿
爱范儿
J
Java Code Geeks
博客园 - Franky
Last Week in AI
Last Week in AI
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
GbyAI
GbyAI
Recent Announcements
Recent Announcements
小众软件
小众软件
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog

博客园 - 暴风雨

新开发的网站,小熊礼品网 w3c 检查 怎样利用网络来扩大幼儿园的影响力? 幼教网址大全 免费幼儿园网站 打靶问题 使用Google Search API 怎样在Exe间传递参数 .Net开发中的设计问题和构架 用IComparable来实现可排序的集合 用C#实现MVC(Model View Control)模式介绍 以前的作业:八皇后问题求解 C++写的一个读取CSV文件的函数 尝试概要设计的写法 今天游泳很高兴 每天进步一点点 自己写的一个VB.netDB操作类 .NET Framework 自动内存管理机制深入剖析 (C#分析篇)[转] 深秋夜自嘲
构建模式—单例模式
暴风雨 · 2006-04-03 · via 博客园 - 暴风雨

引言

很多程序设计都或多或少的涉及设计模式。现在大约有23种设计模式,分类如下:

I] Creational Patterns (构建模式)

  1. Singleton (单例模式)
  2. Factory (工厂模式)
  3. Abstract Factory (抽象工厂)
  4. Builder (创建模式)
  5. Prototype(原型模式)

II] Structural Patterns (结构化模式)

  1. Adapter (适配器模式)
  2. Bridge (桥模式)
  3. Composite (复合模式)
  4. Decorator (装饰模式)
  5. Facade (门面模式)
  6. Flyweight (享元模式)
  7. Proxy(代理模式)

III] Behavioral Pattern (行为模式)

  1. Chain Of Responsibility (职责链模式)
  2. Command (命令模式)
  3. Interpreter (解释器模式)
  4. Iterator (迭代器模式)
  5. Mediator (中介者模式)
  6. Memento (备忘录模式)
  7. Observer (观察者模式)
  8. State (状态模式)
  9. Strategy (策略模式)
  10. Template Method (模板方法)
  11. Visitor(访问者模式)

这篇文章讨论单例模式的实现。

概念

设计模式的最显著的优点如下:

    ◆它们给你提供一个解决已有的并经过项目考验的类似问题的方案。这个解决方案促进复杂关系模块向着最低化耦合发展。它们将系统中可能存在的变化孤立起来,使整个系统更容易理解和维护。

    ◆设计模式是设计人员间的交流更为有效。软件专业人员可以马上在脑海中勾画出一个高水平的设计方案,并想到以前解决类似问题的设计模式的名称。

单例模式:在单例模式中,对活动的单例类只有一个实例。对单例类的所有实例化得到的都是相同的一个实例。这个模式也提供一个全局的接口来访问这个类的实例。

类图

时序图

实现

以下步骤实现单例模式:

第一步:

    创建一个Console Application的项目,命名为SingletonTest

第二步:
    加入一个名为
Singleton的类文件,并且加入一下代码:

/// <summary>
/// Summary description for Singleton.
/// </summary>

public class Singleton
{
//Fields
private static Singleton instance;

/// <summary>
/// Standard default Constructor 
/// </summary>

protected Singleton() {}

/// <summary>
/// Static method for creating the single instance 
/// of the Constructor
/// </summary>
/// <returns></returns>

public static Singleton Instance()
{
// initialize if not already done 
if( instance == null )
instance 
= new Singleton();

// return the initialized instance of the Singleton Class
return instance;
}

}

第三步:

创建一个客户端类,来访问这个单例类,如下:

/// <summary>
/// Summary description for Client.
/// </summary>

class Client
{
/// <summary>
/// The main entry point for the application.
/// </summary>

[STAThread]
static void Main(string[] args)
{
// Constructor is protected -- cannot use new
Singleton s1 = Singleton.Instance();
Singleton s2 
= Singleton.Instance();
if( s1 == s2 )
Console.WriteLine( 
"The same instance" );
Console.ReadLine();
}

}
 

第四步:

执行这个程序得到如下结果:

结论

这样我们用.Net framwork实现了一个单例模式的例子。像所有理论一样,单利模式也有它的优点和缺点。


单例模式的优点:

    1,实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。

    2,伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。


单例模式的缺点:

    1,系统开销。虽然这个系统开销看起来很小,但是每次引用这个类实例的时候都要进行实例是否存在的检查。这个问题可以通过静态实例来解决。

    2,开发混淆。当使用一个单例模式的对象的时候(特别是定义在类库中的),开发人员必须要记住不能使用new关键字来实例化对象。因为开发者看不到在类库中的源代码,所以当他们发现不能实例化一个类的时候会很惊讶。

    3,对象生命周期。单例模式没有提出对象的销毁。在提供内存管理的开发语言(比如,基于.NetFramework的语言)中,只有单例模式对象自己才能将对象实例销毁,因为只有它拥有对实例的引用。在各种开发语言中,比如C++,其它类可以销毁对象实例,但是这么做将导致单例类内部的指针指向不明。