原型模式(Prototype Pattern)
原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。C# 提供了 ICloneable 接口,用 C# 实现原型模式很简单。
1)使用Object的MemberwiseClone() 方法
using System;
using System.Text; namespace ConsoleApplication { public class WebSite { public string Name { get; set; } public string Url { get; set; } static WebSite webSite = new WebSite() { Name = "cjavapy", Url = "https://www.cjavapy.com" }; /// /// 原型模式:解决对象重复创建的问题 /// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建 /// Object有 MemberwiseClone() 方法默认浅克隆 /// /// public static WebSite CreateInstancePrototype() { return (WebSite)webSite.MemberwiseClone(); } } class Program { static void Main(string[] args) { var obj=WebSite.CreateInstancePrototype(); Console.WriteLine("Name={0},Url={1}",obj.Name,obj.Url); Console.ReadKey(); } } }
2)使用ICloneable接口
using System;
using System.Text;
namespace ConsoleApplication
{
public class WebSite : ICloneable
{
public string Name { get; set; }
public string Url { get; set; }
static WebSite webSite = new WebSite()
{
Name = "cjavapy",
Url = "https://www.cjavapy.com"
};
///
/// 原型模式:解决对象重复创建的问题
/// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建
///
///
public static WebSite CreateInstancePrototype()
{
return (WebSite)webSite.MemberwiseClone();
}
public object Clone()
{
return new WebSite() { Name = this.Name, Url = this.Url };
}
}
class Program
{
static void Main(string[] args)
{
var obj1 = new WebSite()
{
Name = "cjavapy",
Url = "https://www.cjavapy.com"
};
var obj2 = (WebSite)obj1.Clone();
Console.WriteLine("Name={0},Url={1}", obj2.Name, obj2.Url);
Console.ReadKey();
}
}
}