内容载入中...
版权声明: 上学堂
在OOP中,这种模式是经常遇到的,其含义就是:根据提供给他的数据,返回几个可能类中的一个类的实例,通常他返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,而且根据不同的数据进行了优化.具体来说,简单工厂模式不属于23个GOF模式.如何工作:

如何运用:定义父类
public class Namer{
private string fName,lName;
public string getFname()
{
return fName;
}
public string getLname()
{
return lName;
}
}
定义两个派生类
public class FFirst:Namer{
public FFirst(string name)
{
int i=name.trim().indexof(" ");
if(i>0)
{
fName=name.substring(0,i).trim();
lName=name.substring(i+1).trim();
}
else
{
fName=name;
lName="";
}
}
public class LFirst:Namer{
public LFirst(string name)
{
int i=name.trim().indexof(",");
if(i>0)
{
fName=name.substring(0,i).trim();
lName=name.substring(i+1).trim();
}
else
{
fName=name;
lName="";
}
}
注:两种情况下,把拆分后的名字分别保存在基类中的变量里,在派生类里跟本不需要任何getFname(),getLname()方法,因为已经在基类里给出来了.
创建工厂:
public class FactoryClass
{
public FactoryClass();
public Namer getName(string name)
{
int i=name.indexof(",");
if(i>0)
return new LFirst(name);
else
return new FFirst(name);
}
}
客户端使用:
Namer na=nameFact.getName(txtName.text);
lbFisrt.Text=na.getFname();
lbLFirst.Text=na.getLname();
总结:
通过创建一个简单工厂,它决定返回那一个类的实例并将该实例返回,在确定调用哪个实例的方法,但不需要知道具体使用的是那一个子类.这种方法把和数据相关的问题与类的其他方法隔离开来.;
简单工厂能返回具有同样方法的类的实例,它们可以是不同的派生子类的实例,也可以是实际上毫无关系仅仅是共享了相同接口的类,不管是那一种形式,这些类实例中的方法必须是相同的,并且能够被交替使用.