您的位置:首页 > 其它

设计模式 5/23 原型模式

2017-10-10 23:04 330 查看
原型模式,一个深入浅出,检验你对基础知识了解的是否透彻的一个设计模式。

之所以这样定义,因为我栽了个跟头

想要吃透原型模式,就得深入理解 浅拷贝,深拷贝

想要深入吃透 浅拷贝,深拷贝

我们就要对 值类型 和 引用类型 有较深的认识

如果对 值类型 和 引用类型 有了较深的认识,在GC也至少有一定的修为了

..........我还能继续这样写下去很多,所以有开头的那句话,原型模式,一个深入浅出,检验你对基础知识了解的是否透彻的一个设计模式。

对值类型 和 引用类型 的浅薄的 入门,可以参考 几年前写的 面试前的准备---C#知识点回顾----02

里面有一些基础知识的介绍,可以作为了解 浅拷贝 和 深拷贝的铺垫

重点来了,看黑板!!!

深拷贝:指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。这样进行深拷贝后的拷贝对象就和源对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。举个例子,你有一张光盘,你进行了多次刻录,产生了第二张,第三者光盘,那这三种光盘是相互独立的,第一张损坏或第二张损坏,都不会影响到第三张【光盘,会不会暴露年龄啊】。在.NET领域,值对象就是典型的例子,如int, Double以及结构体和枚举等。具体例子如下所示:

static void Main()
{
Location seaTurtleLocation = new Location(2, 2);

//大海龟出生
SeaTurtle bigSeaTurtle = new SeaTurtle(seaTurtleLocation, 10, 10);

//照着大海龟 拷贝一个小海龟  A
Enemy smallSeaTurtleA = (SeaTurtle)bigSeaTurtle.DeepClone();
smallSeaTurtleA.Location.X = seaTurtleLocation.X + 1;
smallSeaTurtleA.Power = bigSeaTurtle.Power / 2;

//再直接copy小海龟A 拷贝一个小海龟  B
Enemy smallSeaTurtleB = (SeaTurtle)smallSeaTurtleA.DeepClone();
smallSeaTurtleB.Location.X = seaTurtleLocation.X - 1;

bigSeaTurtle.Show();
smallSeaTurtleA.Show();
smallSeaTurtleB.Show();
Console.ReadLine();

}


View Code
最终的结果

我是海龟,攻击力:10,速度:10,出生点位:2,2
我是海龟,攻击力:5,速度:10,出生点位:3,2
我是海龟,攻击力:5,速度:10,出生点位:1,2


我在Enemy类中实现了接口ICloneable,大家可以试试用Clone方法会得到什么效果

总结下

优点:

用于创建重复的对象,同时又能保证性能,同时,我们还可以不用构造方法

缺点

1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。

2、逃避了构造函数的约束,如果我们的构造方法有约定,那因为可以不用到构造方法,所以我们逃避了约定

以上就是关于 原型模式 的分享

你们的支持是我写作的动力源泉,请不要吝啬你的点赞,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: