简单工厂模式及时根据它提供的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务都不同,而且根据不同的数据进行了优化。该设计模式实际上并不属于23个GoF模式。 下面的例子就说明了这个道理: 这个例子主要是用来根据用户录入的“FirstName LastName”和“LastName,FirstName”两种可能的姓名来获得FirstName和LastName。父类是Namer,子类是FirstFirst,LastFirst,简单的工厂类是NamerFact,具体的代码如下:
namespace GoFClass { //父类 public class Namer { protected string strFirstName; protected string strLastName;
public string getFirstName() { return strFirstName; } public string getLastName() { return strLastName; } }
//以下是两个派生类 public class FirstFirst:Namer { public FirstFirst(string strName) { int i=strName.Trim().IndexOf(" "); if(i>0) { strFirstName=strName.Substring(0,i).Trim(); strLastName=strName.Substring(i+1).Trim(); } else { strFirstName=""; strLastName=strName; } } }
public class LastFirst:Namer { public LastFirst(string strName) { int i=strName.Trim().IndexOf(","); if(i>0) { strLastName=strName.Substring(0,i).Trim(); strFirstName=strName.Substring(i+1).Trim(); } else { strFirstName=""; strLastName=strName; } } }
//简单工厂类
public class NameFactory { public NameFactory() { } public Namer getName(string strName) { int i=strName.Trim().IndexOf(" "); if(i>0) return new FirstFirst(strName); else return new LastFirst(strName); } } }
//使用方法
NameFactory nameFac=new NameFactory(); Namer namer=nameFac.getName(tbName.Text); tbFirstName.Text=namer.getFirstName(); tbLastName.Text=namer.getLastName();
|