当前位置:   article > 正文

C#设计模式之---原型模式_c# 原型模式

c# 原型模式

原型模式(Prototype Pattern)

原型模式(Prototype Pattern) 是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种创建型设计模式。也就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。C# 提供了 ICloneable 接口,用 C# 实现原型模式很简单。

(1)使用Object的MemberwiseClone() 方法

  1. using System;
  2. using System.Text;
  3. namespace ConsoleApplication
  4. {
  5. public class WebSite
  6. {
  7. public string Name { get; set; }
  8. public string Url { get; set; }
  9. static WebSite webSite = new WebSite()
  10. {
  11. Name = "cjavapy",
  12. Url = "https://www.cjavapy.com"
  13. };
  14. ///
  15. /// 原型模式:解决对象重复创建的问题
  16. /// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建
  17. /// Object有 MemberwiseClone() 方法默认浅克隆
  18. ///
  19. ///
  20. public static WebSite CreateInstancePrototype()
  21. {
  22. return (WebSite)webSite.MemberwiseClone();
  23. }
  24. }
  25. class Program
  26. {
  27. static void Main(string[] args)
  28. {
  29. var obj=WebSite.CreateInstancePrototype();
  30. Console.WriteLine("Name={0},Url={1}",obj.Name,obj.Url);
  31. Console.ReadKey();
  32. }
  33. }
  34. }

 (2)使用ICloneable接口

  1. using System;
  2. using System.Text;
  3. namespace ConsoleApplication
  4. {
  5. public class WebSite : ICloneable
  6. {
  7. public string Name { get; set; }
  8. public string Url { get; set; }
  9. static WebSite webSite = new WebSite()
  10. {
  11. Name = "cjavapy",
  12. Url = "https://www.cjavapy.com"
  13. };
  14. ///
  15. /// 原型模式:解决对象重复创建的问题
  16. /// 通过MemberwiseClone来clone新对象,内存操作,直接复制的,避免重复创建
  17. ///
  18. ///
  19. public static WebSite CreateInstancePrototype()
  20. {
  21. return (WebSite)webSite.MemberwiseClone();
  22. }
  23. public object Clone()
  24. {
  25. return new WebSite() { Name = this.Name, Url = this.Url };
  26. }
  27. }
  28. class Program
  29. {
  30. static void Main(string[] args)
  31. {
  32. var obj1 = new WebSite()
  33. {
  34. Name = "cjavapy",
  35. Url = "https://www.cjavapy.com"
  36. };
  37. var obj2 = (WebSite)obj1.Clone();
  38. Console.WriteLine("Name={0},Url={1}", obj2.Name, obj2.Url);
  39. Console.ReadKey();
  40. }
  41. }
  42. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/487352
推荐阅读
相关标签
  

闽ICP备14008679号