這裡根據名字獲取改名字的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();