class Namer
{
public string fName, lName;
public void GetLName()
{
Console.WriteLine(lName);
}
public void GetFName()
{
Console.WriteLine(fName);
}
}
class FirstName : Namer
{
public FirstName(string name)
{
int i = name.Trim().IndexOf(",");
if (i > 0)
{
fName = name.Substring(0, i).Trim();
lName = name.Substring(i + 1).Trim();
}
else
{
lName = name;
fName = "";
}
}
}
class LastName:Namer
{
public LastName(string name)
{
int i = name.Trim().IndexOf(",");
if (i > 0)
{
lName = name.Substring(0, i);
fName = name.Substring(i + 1).Trim();
}
else
{
lName = name;
fName = "";
}
}
}
class NameFactory
{
public NameFactory() { }
public Namer GetName(string name)
{
int i = name.IndexOf(",");
if (i > 0)
return new LastName(name);
else
return new FirstName(name);
}
}
class Program
{
static void Main(string[] args)
{
NameFactory nf = new NameFactory();
Namer nm = nf.GetName("Hello,World");
nm.GetFName();
nm.GetLName();
}
}
创建一个抽象工厂,决定返回哪一个类的实例并将该实例返回。接下来可以调用那个类的实例方法,但是不需要知道具体使用的是哪一个子类,这种方法把和数据相关的问题与类的其他方法分隔开来