求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 
 

设计模式教程
简单工厂模式
AbstractFactory模式
FactoryMethod模式
Prototype模式
Singleton模式
Template Method模式
Builder模式
Class-Adapter 模式
Facade 模式
Object-Adapter 模式
Bridge模式
 
 

Singleton模式
1392 次浏览
44次  
来源:火龙果软件   作者:俎涛
 

简要图标

结构类图:

问题 保证一个类仅有一个实例
环境 实例具有共同的存在空间
解决方案 提供一个创建实例的静态方法,封装构造函数的访问。
为了防止单例创建的并发问题,可以对创建的代码加上并发锁,防止因为并发同时创建成功
实例 宇宙里只能创建一个太阳

模式范例

下面对模式给出范例,包括:

  • 需求,采用用例模型描述
  • 设计,包括:设计类图,顺序图。
  • 实现:代码目录。
  • 运行:运行效果界面

用例模型

用例名称 创建太阳
用例概述 很多大臣拜见的皇帝,只有一个。
基本场景 宇宙创建太阳
如果没有就创建一个。
备选场景 如果有太阳,则指向现存的太阳,保证太阳唯一性。

设计类图

顺序图:

代码目录

class Sun

{

        private string name ="";

private static Sun _instance; //单一的引用,指向本类的实例的引用。

public static Sun Instance()  //得到单例的方法,应该能够通过类调用。

{

if (_instance == null)

_instance = new Sun();

return _instance;

}

protected Sun(){} //构造函数给保护,只能自己或者儿子用

 

public void SetName(string name) {this.name = name;}

public string GetName(){return this.name;}

}

 

 

    public class Universe

    {

        public static int Main(string[] args)

        {

            string val;

Sun FirstSun = Sun.Instance();

Sun SecondSun = Sun.Instance();

FirstSun.SetName("太阳1");

Console.WriteLine("设置第一太阳 的名字为:太阳1");

 

val = SecondSun.GetName();

            Console.WriteLine("第二个的名字现在是 = {0}", val);

 

            SecondSun.SetName("太阳2");

            Console.WriteLine("设置第二个太阳的名字   太阳2");

 

            val = FirstSun.GetName();

 

Console.WriteLine("第一个太阳的名字 = {0}", val);

            return 0;

        }

    }

 

运行效果


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1392 次浏览
44次
 捐助