介绍:
原型模式是一种创建型设计模式,其主要目的是通过克隆现有对象来创建新对象,而不是通过实例化新的对象。这种模式在需要创建相似对象时非常有用,尤其是当对象的创建过程比较昂贵或复杂时。
实现原理:
原型模式通过克隆已有的对象来创建新的对象。对象的克隆可以分为浅克隆和深克隆两种方式:
浅克隆: 只复制对象本身,不复制对象内部的引用对象。
深克隆: 除了复制对象本身外,还会递归复制对象内部的引用对象。
思路:
- 定义一个抽象原型类或接口,该类或接口声明了一个用于克隆自身的方法。
- 具体的原型类实现克隆方法,以实现对象的克隆。
- 在需要创建新对象时,通过调用原型对象的克隆方法来创建新对象,而无需直接使用构造函数实例化新对象。
优点:
- 提高性能:避免了对象的重复创建和初始化过程,提高了性能。
- 简化对象创建过程:通过克隆已有对象来创建新对象,简化了对象的创建过程。
- 避免构造函数的调用:直接克隆对象,无需调用构造函数,避免了构造函数的调用过程。
C#代码示例:
using System;
// 抽象原型类
abstract class Prototype
{
public abstract Prototype Clone();
}
// 具体原型类
class ConcretePrototype : Prototype
{
private int _data;
public ConcretePrototype(int data)
{
this._data = data;
}
// 实现克隆方法
public override Prototype Clone()
{
// 浅克隆
return (Prototype)this.MemberwiseClone();
// 深克隆
// return new ConcretePrototype(this._data);
}
public void SetData(int data)
{
this._data = data;
}
public int GetData()
{
return this._data;
}
}
class Program
{
static void Main(string[] args)
{
// 创建原型对象
ConcretePrototype prototype = new ConcretePrototype(10);
// 克隆原型对象
ConcretePrototype clonedPrototype = (ConcretePrototype)prototype.Clone();
// 修改克隆对象的数据
clonedPrototype.SetData(20);
// 打印原型对象和克隆对象的数据
Console.WriteLine("Prototype Data: " + prototype.GetData()); // 输出 10
Console.WriteLine("Cloned Prototype Data: " + clonedPrototype.GetData()); // 输出 20
}
}