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