C# 设计模式系列教程-原型模式

2019-12-30 12:53:46于海丽
原型模式隐藏了对象的创建细节,对有些初始化需要占用很多资源的类来说,对性能也有很大提高。  

1. 概述

  通过复制一个已经存在的实例来创建一个新的实例。被复制的实例被称为原型,这个原型是可定制的。

2. 模式中的角色

  2.1 抽象原型类(Abstract Prototype):提供一个克隆接口

  2.2 具体原型类(Concrete Prototype): 及实现了克隆接口的具体原型类

3. 实例:求职网站上现在都支持多份简历,如果每创建一份简历都要从头至尾地填写一遍,那也是非常让人沮丧的事。其实针对我们的求职岗位的不同,不同的简历可能只要修改局部内容就可以了,而不用全部重新构建一份新的简历。复制一份简历,然后做局部修改是最让人省心的了!

  3.1 实现类图

C#,设计模式,原型模式

  类图解读

  在.NET中,System命名空间已经为我们提供了一个ICloneable接口,它包含了一个方法Clone(),实现这个接口就完成了原型模式。

  3.2 在写实现代码之前,先要理解一下深复制与浅复制。

    3.2.1 浅复制:将原来对象中的所有字段逐个复制到一个新对象,如果字段是值类型,则简单地复制一个副本到新对象,改变新对象的值类型字段不会影响原对象;如果字段是引用类型,则复制的是引用,改变目标对象中引用类型字段的值将会影响原对象。例如, 如果一个对象有一个指向引用类型(如例子中的工作经历)的字段, 并且我们对该对象做了一个浅复制, 那麽两个对象将引用同一个引用(即同一段工作经历)。

    3.2.2 深复制:与浅复制不同之处在于对引用类型的处理,深复制将新对象中引用类型字段指向复制过的新对象,改变新对象中引用的任何对象,不会影响到原来的对象中对应字段的内容。例如,如果一个对象有一个指向引用类型(如例子中的工作经历)的字段,并且对该对象做了一个深复制的话.我门将创建一个新的对象(即新的工作经历)。