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

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。