您的位置:首页 > 其它

设计模式-原型模式、单例模式

2016-03-31 11:50 302 查看
原型模式:

该模式用于克隆对象,有2种方式

浅克隆(不复制引用类型)
深克隆(将值类型、引用类型均复制)

C#中提供了MemberwiseClone()方法用于浅克隆和ICloneable接口用于实现深克隆

[b]单例模式 :[/b]



饿汉式单例模式 

public class TaskManager
{
//静态成员
private static TaskManager instance=new TaskManager();

//私有构造函数,用于防止外部创建对象
private TaskManager()
{
tid = "1001";
Console.WriteLine("tid:" + tid + "正在创建进程...");
}

//获取单例实例的 静态方法
public static TaskManager GetInstance()
{
Console.WriteLine("已存在进程tid:" + instance.tid + ",不再创建新进程");
return instance;
}

//其他成员和方法
private string tid;
public void Open()
{
Console.WriteLine("tid:" + tid+" 正在打开任务管理器..." );
}
public void Close()
{
Console.WriteLine("tid:" + tid + " 正在关闭任务管理器...");
}
}
懒汉式单例模式

//懒汉式单例模式
public class TaskManager
{
//静态成员
private static TaskManager instance;

//私有构造函数,用于防止外部创建对象
private TaskManager()
{
tid = "1001";
Console.WriteLine("tid:" + tid + "正在创建进程...");
}

//获取单例实例的 静态方法
public static TaskManager GetInstance()
{
if (instance == null)
{
instance = new TaskManager();
}
else
{
Console.WriteLine("已存在进程tid:" + instance.tid + ",不再创建新进程");
}
return instance;
}

//其他成员和方法
private string tid;
public void Open()
{
Console.WriteLine("tid:" + tid+" 正在打开任务管理器..." );
}
public void Close()
{
Console.WriteLine("tid:" + tid + " 正在关闭任务管理器...");
}

}


线程安全的 懒汉单例模式

//线程安全的 懒汉单例模式
public class TaskManager
{
//静态成员
private static TaskManager instance;

//同步锁
private static readonly object myLock = new object();

//私有构造函数,用于防止外部创建对象
private TaskManager()
{
tid = "1001";
Console.WriteLine("tid:" + tid + "正在创建进程...");
}

//获取单例实例的 静态方法
public static TaskManager GetInstance()
{
if (instance == null)
{
//同步代码块
lock(myLock)
{
//再次判断
if (instance == null)
instance = new TaskManager();
}

}
else
{
Console.WriteLine("已存在进程tid:" + instance.tid + ",不再创建新进程");
}
return instance;
}

//其他成员和方法
private string tid;
public void Open()
{
Console.WriteLine("tid:" + tid+" 正在打开任务管理器..." );
}
public void Close()
{
Console.WriteLine("tid:" + tid + " 正在关闭任务管理器...");
}

}
客户端代码
class Program
{
static void Main(string[] args)
{
//模拟 用户开启了2次任务管理器
TaskManager taskManager1 = TaskManager.GetInstance();
TaskManager taskManager2 = TaskManager.GetInstance();

taskManager1.Open();
taskManager2.Close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: