原型模式(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();
}
}
}