{
private Product product = new Product();
public override void BuildPartA()
{
product.Add("部件A");
}
public override void BuildPartB()
{
product.Add("部件B");
}
public override Product GetResult()
{
return product;
}
}
class ConcreateBuilder2 : Builder2 //具体建造者ConcreateBuilder2——工人
{
private Product product = new Product();
public override void BuildPartA()
{
product.Add("部件X");
}
public override void BuildPartB()
{
product.Add("部件Y");
}
public override Product GetResult()
{
return product;
}
}
class Director2 //指挥者类——设计师
{
public void Construct(Builder2 builder)
{ //用来指挥建造者的过程
builder.BuildPartA();
builder.BuildPartB();
}
}
}
5. 原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其实就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。秘密武器:克隆自身(不知道大家见过做月饼的模子没有,就像它,用这个模子可以做出一个一样的东西,做出来之后还可以稍微修改一下成为你想要的形状)
UML图:

代码:
view plaincopy to clipboardprint //9.5简历的浅复制
namespace 原型模式
{
class Class3
{
static void Main(string[] args)
{
Resume2 a = new Resume2("大鸟");
a.SetPersonalInfo("男","29");
a.SetWorkExpersonalInfo("1998-2000","XX公司");
Resume2 b = (Resume2)a.Clone();
b.SetWorkExpersonalInfo("2000-2006","YY公司");
Resume2 c = (Resume2)a.Clone();
c.SetPersonalInfo("男","33");
c.SetWorkExpersonalInfo("1900-1937","ZZ公司");
a.Display();
b.Display();
c.Display();
Console.Read();
}
}
class WorkExperience //工作经历
{
private string workDate;
public string WorkDate
{
get { return workDate; }
set { workDate = value; }
}
private string company;
public string Company
{
get { return company; }
set { company = value; }
}
}
class Resume2 : ICloneable //简历
{
private string name;
private string sex;
private string age;
private WorkExperience work;
public Resume2(string name)
{
this.name = name;
work = new WorkExperience();
}
public void SetPersonalInfo(string sex, string age)
{
this.sex = sex;
this.age = age;
}
public void SetWorkExpersonalInfo(string workDate, string company)
{
work.WorkDate = workDate;
work.Company = company;
}
public void Display()
{
Console.WriteLine("{0}{1}{2}",name,sex,age );
Console.WriteLine("工作经历:{0}{1}",work.WorkDate,work.Company );
}
/* MemberwiseClone 方法创建一个浅表副本,具体来说就是创建一个新的对象
* 然后将当前对象的非静态字段复制到该新对象,如果字段是子类型
* 则对该字段进行逐位的复制,如果是引用则复制引用但不复制
* 引用的对象;因此,原始对象及其副本引用同一对象
*/
public Object Clone()
{
return (Object)this.MemberwiseClone(); //浅复制,引用都指向同一个对象
}
}
}
作者“许德鹏的专栏”