C#设计模式系列1-简单工厂模式

简单工厂模式及时根据它提供的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务都不同,而且根据不同的数据进行了优化。该设计模式实际上并不属于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();

Published At
Categories with Web编程
Tagged with
comments powered by Disqus