C#设计模式——原型模式(Prototype Pattern)
时间: 2023-10-07 10:08:29 浏览: 134
原型模式是一种创建型设计模式,它允许你通过复制一个已经存在的对象来创建新的对象,而不是通过实例化来创建。这种方式可以大大减少对象的创建时间和内存消耗。
在C#中,原型模式的实现需要满足两个条件:
1. 实现ICloneable接口,该接口只有一个方法Clone(),用于复制对象。
2. 对象必须是可复制的,即必须是浅复制或深复制。
浅复制是指复制一个对象,但是不复制对象中的引用类型成员变量,这意味着复制的对象和原始对象共享相同的引用类型成员变量。深复制则是复制一个对象及其引用类型成员变量,这意味着复制的对象和原始对象不共享相同的引用类型成员变量。
下面是一个使用原型模式的示例代码:
```csharp
using System;
namespace PrototypePattern
{
// 实现ICloneable接口
public class Person : ICloneable
{
public string Name { get; set; }
public int Age { get; set; }
public Address Address { get; set; }
public object Clone()
{
// 深复制
return new Person
{
Name = this.Name,
Age = this.Age,
Address = new Address
{
Street = this.Address.Street,
City = this.Address.City,
State = this.Address.State
}
};
}
public override string ToString()
{
return $"Name: {Name}, Age: {Age}, Address: {Address}";
}
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public override string ToString()
{
return $"{Street}, {City}, {State}";
}
}
class Program
{
static void Main(string[] args)
{
var person1 = new Person
{
Name = "Tom",
Age = 20,
Address = new Address
{
Street = "123 Main St",
City = "New York",
State = "NY"
}
};
// 使用Clone方法复制对象
var person2 = (Person)person1.Clone();
person2.Name = "Jerry";
person2.Address.Street = "456 Elm St";
Console.WriteLine(person1);
Console.WriteLine(person2);
}
}
}
```
输出结果:
```
Name: Tom, Age: 20, Address: 123 Main St, New York, NY
Name: Jerry, Age: 20, Address: 456 Elm St, New York, NY
```
可以看到,使用原型模式可以方便地创建新的对象,而且不需要关心对象的创建过程。
阅读全文