您的位置:首页 > 其它

设计模式之原型模式

2017-08-24 13:46 288 查看

c#原型模式

1、定义

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要任何创建的细节。

2、深复制和浅复制

1.深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象

2.被复制对象的所有对象都含有与原来对象相同的值,而所有的对其他对象的引用都任然指向原来的对象

3、实现原理

UML类图



2.代码实现

//抽象的原型类
abstract class AProtoType
{

private string id;
public AProtoType(string id)
{
this.id = id;
}
public string ID
{
get { return id; }
}

//Clone()方法,抽象的关键
public abstract AProtoType Clone();
}


//具体的原型类
class ConcreteProtoTypeA : AProtoType
{
public ConcreteProtoTypeA(string id) : base(id)
{
}

public override AProtoType Clone()
{
//创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。
//如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;
//因此原始对象及其副本引用同一个对象

return (AProtoType)this.MemberwiseClone();
}
}


客户端:

class Program
{
static void Main(string[] args)
{
ConcreteProtoTypeA ct = new ConcreteProtoTypeA("123");
//克隆类ConcreteProtoTypeA的对象ct能得到新的实例copy
ConcreteProtoTypeA copy =(ConcreteProtoTypeA) ct.Clone();
Console.WriteLine("Cloned:{0}",copy.ID);
Console.ReadKey();

}
}


输出:Cloned:123

4、实例

简历的原型实现:

4.1UML类图



4.2代码实现

//简历类,实现可复制接口
class PersonResume : ICloneable
{
private string name;
private string sex;
private string age;
private string timeArea;
private string company;
public PersonResume(string name)
{
this.name = name;
}
//设置个人信息
public void SetInfo(string sex,string age)
{
this.age = age;
this.sex = sex;
}
//设置工作经历
public void WorkExprience(string timearea,string company)
{
this.timeArea = timearea;
this.company = company;
}
//显示
public void Show()
{
Console.WriteLine("{0},{1},{2}",name,sex,age);
Console.WriteLine("{0},{1}",timeArea,company);
}
//实现接口的方法,用来克隆对象
public object Clone()
{
return (object)this.MemberwiseClone();
}
}


客户端:

class Program

{

static void Main(string[] args)

{

PersonResume pr = new PersonResume(“DZB”);

pr.SetInfo(“Man”,”18”);

pr.WorkExprience(“Three years”,”WKD”);

PersonResume copy = (PersonResume)pr.Clone();
copy.WorkExprience("Four Years","WKDCY");

pr.Show();
copy.Show();

Console.ReadKey();

}
}


输出:DZB Man 18 Three years WKD

DZB Man 18 Four years WKDCY

5、源代码

设计模式之原型模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 原型