简单工厂模式的最大长处在于工厂类中包括了必要的逻辑推断。依据client的钻则条件动态实例化相关的类。对于client来说,去除了与详细产品的依赖。
工厂方法模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。工厂方法模式实现时。client须要决定实例化哪一个工厂来实现运算类,选择推断的问题还是存在的,也就是说,工厂方法把简单的内部逻辑推断转移到了client代码来进行,假设加入功能。本来须要改动工厂类,而如今改动的是client。
class Namer
{
public string fName, lName;
public void GetLName()
{
Console.WriteLine(lName);
}
public void GetFName()
{
Console.WriteLine(fName);
}
}
class FirstName : Namer
{
public FirstName(string name)
{
int i = name.Trim().IndexOf(",");
if (i > 0)
{
fName = name.Substring(0, i).Trim();
lName = name.Substring(i + 1).Trim();
}
else
{
lName = name;
fName = "";
}
}
}
public LastName(string name)
{
int i = name.Trim().IndexOf(",");
if (i > 0)
{
lName = name.Substring(0, i);
fName = name.Substring(i + 1).Trim();
}
else
{
lName = name;
fName = "";
}
}
}
interface INameFactory
{
Namer CreatName(string _name);
}
class FirstNameFactory : INameFactory
{
public Namer CreatName(string _name)
{
return new FirstName(_name);
}
}
class LastNameFactory : INameFactory
{
public Namer CreatName(string _name)
{
return new LastName(_name);
}
}
class Program
{
static void Main(string[] args)
{
INameFactory inf = new FirstNameFactory();
Namer nm = inf.CreatName("Hello,world");
nm.GetFName();
nm.GetLName();
}
}
在下列情况下,应该考虑使用工厂方法:
一个类无法预測他要创建的对象属于哪一个类
一个类用它的子类来指定创建对象
要把创建哪一个类的信息局部化的时候