最近听Msdn- -讲师说过:如果没有学会设计模式上来就看包含设计模式的代码,--自以为看懂了但是如果换个场景就不知道该如何了--〉说的特别象我~~所以努力学习设计模式中原型设计模式--寻源之旅
总结下~~:->/Files/ajaxren/寻源之旅.rar
1针对接口编程,而不是针对实现编程
-客户无须知道所使用对象的特定类型,只需要知道对象有客户所期望的接口
2优先使用对象组合,而不是类继
承继承通常为"白箱复用",对象组合称为黑箱复用,继承在某种程度上
破坏了类的封装性,子类父类耦合度高,对象组合只要求被组合的对象有良好的接口,耦合低
3封装变化点
使用封装来创建对象之间的分界层,让设计者可以在分界层的一端修改而不影响另一端

--ok废话多了点~~请注意红色的地方~~
这个模式就是利用克隆来得到新的对象,克隆就是说所有的成员都会连同们保存的数据一起被克隆
,实际上就是开辟一个新的地址比如
原型设计模式--寻源之旅public abstract class NormalActrow


上面是标准的做法,确实没有什么问题- -很好原型设计模式--寻源之旅,但是如果克隆的类有个非值类型,则不克隆,而是直接和被克隆的对象引用同一地址,- -换句话说,就是找不到源头。


原型设计模式--寻源之旅
上图第一部分是浅拷贝,当有个非值类型-〉200出现的时候,上下同时引用,
上图第二部分深层拷贝则是不会出现这个问题- -找到源头了
//--测试代码

原型设计模式--寻源之旅using System;
原型设计模式--寻源之旅
using System.Collections.Generic;
原型设计模式--寻源之旅
using System.Text;
原型设计模式--寻源之旅
原型设计模式--寻源之旅
namespace Clr.ProtoType.d
}

//--这个是测试结果
原型设计模式--寻源之旅

d<c<a<b

分析下:
d:是浅层拷贝
NormalActrowA na1 = (NormalActrowA)this.MemberwiseClone();
c:深层拷贝~一个元素一个元素的拷贝
            NormalActrowA na1 = new NormalActrowA();
            na1.a = this.a;
            na1.pi.b = this.pi.b;
            na1.pi.S1 = this.pi.S1;
            na1.pi.T = this.pi.T;
            na1.pi["dd"] = na1.pi["dd"];
a:深层拷贝:先拷自己,在拷贝引用--I Like
           NormalActrowA na1 = (NormalActrowA)this.MemberwiseClone();
            na1.pi = (p)this.pi.Clone();

c:序列化

           NormalActrowA na1;
            System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            formatter.Serialize(memoryStream, this);
            memoryStream.Position = 0;
            //--利用反序列化
            na1 = (NormalActrowA)formatter.Deserialize(memoryStream);

            na1.pi.b = 12;
            Console.WriteLine("经过克隆更改的数据:{0}", ((NormalActrowA)na1).pi.b);
            Console.WriteLine();
            Console.WriteLine("原始数据 :{0}", this.pi.b);
            return na1;
我个人比较喜欢:a 性价比试中..如果您有更好的方法- -分享下谢谢咯

相关文章:

  • 2021-04-25
  • 2022-01-19
  • 2021-06-06
猜你喜欢
  • 2022-12-23
  • 2021-12-13
  • 2021-10-22
  • 2021-11-20
  • 2021-11-20
  • 2021-06-01
相关资源
相似解决方案