原型模式的目的是: 将用户与构造函数隔离,通过拷贝生成新对象。
实例代码:
[Serializable]
class Person : ICloneable //定义Person类
{
private string _name; //姓名
private int _age; //年龄
private string _sex; //性别
private int _stature; //身高
internal Person(string name, int age, string sex, int stature)
{
this._name = name; this._age = age;
this._sex = sex; this._stature = stature;
}
public object Clone() //通过序列化克隆人
{
Console.WriteLine("克隆前状态 Person Name:{0},Age:{1},Sex:{2},Stature:{3}",
this._name, this._age.ToString(), this._sex, this._stature.ToString());
ICloneable person;
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formatter.Serialize(memoryStream, this);
byte[] bs = memoryStream.ToArray();
Console.Write("克隆中状态 Person:");
foreach (byte b in bs)
Console.Write(b + " ");
memoryStream.Position = 0;
person = (ICloneable)formatter.Deserialize(memoryStream);
Console.WriteLine("\n克隆后状态 Person Name:{0},Age:{1},Sex:{2},Stature:{3}",
((Person)person)._name, ((Person)person)._age.ToString(), ((Person)person)._sex, ((Person)person)._stature.ToString());
return person;
}
}
class PersonManager //控制类
{
Hashtable persons = new Hashtable();
public ICloneable this[string name]
{
get
{
return persons[name] as ICloneable;
}
}
public void AddPerson(string name, int age, string sex, int stature)
{
Person p = new Person(name,age,sex,stature);
persons.Add(name, p);
}
}
//测试
class MainApp
{
static void Main()
{
PersonManager personManager = new PersonManager();
personManager.AddPerson("小三", 30, "男", 170);
personManager.AddPerson("小四", 26, "男", 178);
personManager.AddPerson("小五", 26, "男", 180);
Person person = personManager["小五"].Clone() as Person;
Console.Read();
}
}
实例代码:
[Serializable]
class Person : ICloneable //定义Person类
{
private string _name; //姓名
private int _age; //年龄
private string _sex; //性别
private int _stature; //身高
internal Person(string name, int age, string sex, int stature)
{
this._name = name; this._age = age;
this._sex = sex; this._stature = stature;
}
public object Clone() //通过序列化克隆人
{
Console.WriteLine("克隆前状态 Person Name:{0},Age:{1},Sex:{2},Stature:{3}",
this._name, this._age.ToString(), this._sex, this._stature.ToString());
ICloneable person;
System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formatter.Serialize(memoryStream, this);
byte[] bs = memoryStream.ToArray();
Console.Write("克隆中状态 Person:");
foreach (byte b in bs)
Console.Write(b + " ");
memoryStream.Position = 0;
person = (ICloneable)formatter.Deserialize(memoryStream);
Console.WriteLine("\n克隆后状态 Person Name:{0},Age:{1},Sex:{2},Stature:{3}",
((Person)person)._name, ((Person)person)._age.ToString(), ((Person)person)._sex, ((Person)person)._stature.ToString());
return person;
}
}
class PersonManager //控制类
{
Hashtable persons = new Hashtable();
public ICloneable this[string name]
{
get
{
return persons[name] as ICloneable;
}
}
public void AddPerson(string name, int age, string sex, int stature)
{
Person p = new Person(name,age,sex,stature);
persons.Add(name, p);
}
}
//测试
class MainApp
{
static void Main()
{
PersonManager personManager = new PersonManager();
personManager.AddPerson("小三", 30, "男", 170);
personManager.AddPerson("小四", 26, "男", 178);
personManager.AddPerson("小五", 26, "男", 180);
Person person = personManager["小五"].Clone() as Person;
Console.Read();
}
}


浙公网安备 33010602011771号