设计模式<创建型> | 原型模式

原型模式(Prototype Pattern)

如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,就可以可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式,简称原型模式。

结构图:

角色:

  1. 原型对象(prototype):需要进行复制的对象。

适用场景:

  1. 需要基于现有的对象信息进行处理。
  2. 初始化类数据需要消费非常多的资源时。

优点:

  1. 可以快速复制原型对象,避免反复运行初始化代码。
  2. 基于原型可以方便地生成复杂对象。

缺点:

  1. 如果原型过于复杂会导致复制代码过于繁琐。

代码(C#)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

public interface ICopy<T>
{
T ShallowCopy();
T DeepCopy();
}

public class Cat : ICopy<Cat>
{
public int age;
public string Name;
public string Variety;


/// <summary>
/// 浅拷贝
/// </summary>
/// <returns></returns>
public Cat ShallowCopy()
{
return (Cat)MemberwiseClone();
}

/// <summary>
/// 深拷贝
/// </summary>
/// <returns></returns>
public Cat DeepCopy()
{
var clone = (Cat)MemberwiseClone();
;
clone.Variety = new string(Name);
clone.Name = new string(Name);
return clone;
}
}

var cat1 = new Cat();
ICopy<Cat> copy = cat1;
cat1.age = 3;
cat1.Name = "77";
cat1.Variety = "银渐层";
var cat2 = copy.ShallowCopy();

var cat3 = copy.DeepCopy();

最后

深拷贝和浅拷贝。浅拷贝只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象……而深拷贝得到的是一份完完全全独立的对象。所以,深拷贝比起浅拷贝来说,更加耗时,更加耗内存空间。


设计模式<创建型> | 原型模式
http://example.com/posts/22548.html
作者
她微笑的脸y
发布于
2023年2月27日
许可协议