设为首页
加入收藏
站内地图
旧版入口
当前位置:首页 > 站长学院 > 网络编程 > ASP.NET

设计模式[创建型]之简单工厂模式

作者:佚名 出处:网络转载 时间:07-23 点击:

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

如何运用:定义父类
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();
总结:
通过创建一个简单工厂,它决定返回那一个类的实例并将该实例返回,在确定调用哪个实例的方法,但不需要知道具体使用的是那一个子类.这种方法把和数据相关的问题与类的其他方法隔离开来.;
简单工厂能返回具有同样方法的类的实例,它们可以是不同的派生子类的实例,也可以是实际上毫无关系仅仅是共享了相同接口的类,不管是那一种形式,这些类实例中的方法必须是相同的,并且能够被交替使用.
收藏本文:
】【打印页面】【推荐给朋友】【关闭窗口

站长学院

推荐信息