這裡根據名字獲取改名字的FirstName和LastName,這裡提供了兩種方式,所以可以采用簡單工廠針對不同的形式創建不同的實例。這裡還兩種實現方式,一種是完全針對類的編程,另一種就是針對接口和類的編程。
(一),針對類
首先有個Namer基類

public class Namer


...{

protected string fName;

protected string lName;


public string GetFirstName()


...{

return fName;

}

public string GetLastName()


...{

return lName;

}

}
這裡定義了受保護的成員fName和lName供派生類使用。下面就是兩個繼承Namer類的派生類,分別實現了兩種獲取名字的方法。

public class FirstFirst : Namer


...{

public FirstFirst(string name)

...{

int i = name.IndexOf(" ");

if (i > 0)


...{

fName = name.Substring(0, i).Trim();

lName = name.Substring(i + 1).Trim();

}

else


...{

lName = name;

fName = "";

}

}

}

public class LastFirst:Namer


...{

public LastFirst(string name)


...{

int i = name.IndexOf(",");

if (i > 0)


...{

fName = name.Substring(0, i).Trim();

lName = name.Substring(i + 1).Trim();

}

else


...{

lName = name;

fName = "";

}

}

}
他們分別針對fName和lName進行賦值。當把FirstFirst或LastFirst類轉化為Namer類時,其實就是把子類的屬性的值給了父類的相應的屬性。下面給出了名字的構造工廠:

public class NameFactory


...{

public NameFactory()


...{ }

public Namer GetName(string name)


...{

if (name.IndexOf(",") > 0)


...{

return new LastFirst(name);

}

else


...{

return new FirstFirst(name);

}

}

}
下面是使用上面這裡類的方法:

string name = this.textBox1.Text;

NameFactory nameFactory = new NameFactory();

Namer namer = nameFactory.GetName(name);

this.textBox2.Text = namer.GetFirstName();

this.textBox3.Text = namer.GetLastName();
(二)針對接口和類
這裡把操作放在接口裡,把屬性放到類中。FirstFirst和LastFirst分別繼承他們。

public interface Namer

...{

string GetFirstName();

string GetLastName();

}

public class Name


...{

private string fName;

private string lName;


public string FName


...{


get ...{ return fName; }


set ...{ fName = value; }

}

public string LName


...{


get ...{ return lName; }


set ...{ lName = value; }

}

}

public class FirstFirst : Name, Namer


...{

public FirstFirst(string name)


...{

int i = name.IndexOf(" ");

if (i > 0)

...{

FName = name.Substring(0, i).Trim();

LName = name.Substring(i + 1).Trim();

}

else


...{

LName = name;

FName = "";

}

}

public string GetFirstName()


...{

return FName;

}

public string GetLastName()


...{

return LName;

}

}

public class LastFirst : Name, Namer


...{

public LastFirst(string name)


...{

int i = name.IndexOf(",");

if (i > 0)


...{

FName = name.Substring(0, i).Trim();

LName = name.Substring(i + 1).Trim();

}

else


...{

; LName = name;

FName = "";

}

}

public string GetFirstName()


...{

return FName;

}

public string GetLastName()


...{

return LName;

}

}

class INameFactory


...{

public INameFactory()


...{ }

public Namer GetName(string name)


...{

if (name.IndexOf(",") > 0)


...{

return new LastFirst(name);

}

else


...{

return new FirstFirst(name);

}

}

}
使用如下:

string name = this.textBox1.Text;

I簡單工廠.INameFactory iNameFactory = new 簡單工廠.I簡單工廠.INameFactory();

I簡單工廠.Namer namer = iNameFactory.GetName(name);


this.textBox2.Text = namer.GetFirstName();

this.textBox3.Text = namer.GetLastName();