C#设计模式——原型模式
前言
原型模式是创建型模式,用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。创建的方式有两种:深拷贝和浅拷贝。两种拷贝方式具体请参考:。
方案思路
此模式内容也比较简单,也是一个比较特殊的模式,有个最大的特点是克隆一个现有的对象,这个克隆的结果有2种,下面就用克隆人来进一步说明。
Code
以下代码经过测试,可直接在项目中使用
/// <summary>
/// 测试类
/// </summary>
public class clone : MonoBehaviour {
void Start () {
Person person0 = new Person("j", 22);
person0.SetClothing(1000, 32);
person0.Show();
//浅拷贝测试
Person person1 = person0.ShallowCopy();
person1.Show();
person1.SetAge(0);
person1.SetClothing( 9999,40);
person0.Show();
person1.Show();
//深拷贝测试
Person person2 = person0.DeepCopy();
person2.Show();
person2.SetAge(99);
person2.SetClothing(100099, 55);
person0.Show();
person1.Show();
person2.Show();
}
}
/// <summary>
/// 人穿的衣服
/// </summary>
[Serializable]
public class Clothing
{
public int money;
public int size;
}
/// <summary>
/// 人
/// </summary>
[Serializable]
public class Person:CopyBase<Person>
{
string name;
int age;
Clothing clothing;
public Person(string name, int age)
{
this.name = name;
this.age = age;
clothing = new Clothing();
}
public void SetName(string name)
{
this.name = name;
}
public void SetAge(int age)
{
this.age = age;
}
public void SetClothing(int money,int size)
{
this.clothing.money = money;
this.clothing.size = size;
}
public void Show()
{
Debug.Log(name + "-----" + age + "-----" + clothing.money + "-----" + clothing.size);
}
}
/// <summary>
/// 深浅拷贝基类
/// </summary>
/// <typeparam name="T"></typeparam>
[Serializable]
public class CopyBase<T>
{
/// <summary>
/// 深拷贝
/// </summary>
/// <returns></returns>
public virtual T DeepCopy()
{
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(memoryStream, this);
memoryStream.Position = 0;
return (T)formatter.Deserialize(memoryStream);
}
/// <summary>
/// 浅拷贝
/// </summary>
/// <returns></returns>
public virtual T ShallowCopy()
{
return (T)this.MemberwiseClone();
}
}
END
感谢阅读
你知道的越多,你不知道的越多
我是EAST
一个靠互联网苟且偷生的程序员
咱们下期见!
扫描二维码关注我吧