五、ProtoType模式
5.1 ProtoType模式的概念
- 定义
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- 使用场景
- 与工厂模式类似,都是用于创建同类对象
- 不同点
- 工厂模式需要单独定义一个工厂来创建对象
- ProtoType模式将创建对象的过程与类的定义(即原型)耦合在一个类中,且新创建的对象与原型实例的各部分都是相同的
5.2 ProtoType模式的实现
- 将工厂方法中创建对象的过程与类的定义合并在一块,并通过拷贝的方式生成新对象
- 拷贝
- 浅拷贝
- 对于引用类型的变量,拷贝的是内存地址,指向同一对象
- Object类的实例方法MemberwiseClone()
- 深拷贝
- 引用类型的变量,进行全值拷贝,指向具有相同属性值的不同对象
- 序列化与反序列化
- 浅拷贝
public abstract class Animal
{
public abstract void Eat();
public abstract void Sleep();
public abstract Animal Clone();
}
public class Cat : Animal
{
public override Animal Clone()
{
return (Animal)this.MemberwiseClone();
}
public override void Eat()
{
Console.WriteLine("猫吃鱼!");
}
public override void Sleep()
{
Console.WriteLine("猫睡觉!");
}
}
public class Dog : Animal
{
public override Animal Clone()
{
return (Animal)this.MemberwiseClone();
}
public override void Eat()
{
Console.WriteLine("狗吃肉!");
}
public override void Sleep()
{
Console.WriteLine("狗睡觉!");
}
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Cat();
//用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
Animal animalA = animal.Clone();
animalA.Eat();
animalA.Sleep();
Animal animalB = animal.Clone();
animalB.Eat();
animalB.Sleep();
Console.ReadLine();
}
}