.net设计模式-原型模式

原型模式是创建型设计模式

原理是克隆一个对象:克隆对象不会走构造函数,速度更快

与单例模式不同的是,单例模式获得的同一个对象,原型模式获得是一个新的对象,如下图

 

在prototype类中添加引用类型的方法

再改变引用类的属性试试:改变student1的属性class中的属性,看看student2的属性的class的变化

结果student2的class属性也随着student1发生变化,说明它们的引用指向同一个地址

那为什么同为引用类型的string却没有发生变化呢??

1.看看以下的变动,改变赋值的方式,这样的赋值方式相当于赋值了新的对象,改变的是新对象的引用的值

2.所以string的赋值方式相当于

 

也是新对象,所以改变student1 不会改变 student2

 3.所以MemberwiseClone 是浅克隆,克隆的只是对象的引用

深克隆

 

 深克隆方法2,序列化,也能产生新的对象

 1 public class SerializeHelper
 2     {
 3         public static string Serializable(object target)
 4         {
 5             using (MemoryStream stream = new MemoryStream())
 6             {
 7                 new BinaryFormatter().Serialize(stream, target);
 8 
 9                 return Convert.ToBase64String(stream.ToArray());
10             }
11         }
12 
13         public static T Derializable<T>(string target)
14         {
15             byte[] targetArray = Convert.FromBase64String(target);
16 
17             using (MemoryStream stream = new MemoryStream(targetArray))
18             {
19                 return (T)(new BinaryFormatter().Deserialize(stream));
20             }
21         }
22 
23         public static T DeepClone<T>(T t)
24         {
25             return Derializable<T>(Serializable(t));
26         }
27     }

 

 **原型模式的应用

1.回滚操作,克隆一个对象回滚使用

2.克隆一个对象,看看更新后的对象哪些字段发生变化了

3.以一个实例为模板生产不同的对象出来,相当于一个生产工厂

 

转载于:https://www.cnblogs.com/Spinoza/p/11421284.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值