class Namer
{
// a simple class to take a string apart into two names
protected String last; // store last name here
protected String first; // store first name here
public String getFirst()
{
return first;
}
public String getLast()
{
return last;
}
}
class FirstNamer extends Namer
{
// extracts first name from last name when separated by a space
public FirstNamer(String s)
{
int i=s.lastIndexOf(" ");
if (i>0)
{
first=s.substring(0,i).trim();
last=s.substring(i+1).trim();
}
else
{
first="";
last=s; // if no space, put all in last name
}
}
}
class LastNamer extends Namer
{
// extracts last name from first name when separated by a comma
public LastNamer(String s)
{
int i=s.indexOf(",");
if (i>0)
{
last=s.substring(0,i).trim();
first=s.substring(i+1).trim();
}
else
{
last=s; // if no comma, put all in last name
first="";
}
}
}
class NamerFactory
{
// Factory decides which class to return based on
// presence of a comma
public Namer getNamer(String entry)
{
int i=entry.indexOf(","); // comma determines name order
// 关键部分
if (i>0)
{
return new LastNamer(entry);
}
else
{
return new FirstNamer(entry);
}
}
}