///<summary>
///创建交通工具接口
///</summary>
public interface CreateVehicle
{
BaseVehicle CreateVehicle();
}
///<summary>
///创建汽车。
///</summary>
public class CreateCar : CreateVehicle
{
public CreateCar() {}
#region CreateVehicle 成员
public BaseVehicle CreateVehicle()
{
return new Car();
}
#endregion
}
这就是工厂方法,但是采用这种方法还是有缺点:如果我们希望增加一个新的交通工具,不仅需要继承交通工具基类,还需要实现产生交通工具的工厂方法。显然,如果我们需要10种交通工具,则需要10个具体的工厂类,而这些类的区别仅仅是返回对应类的实例,所以为维护带来了麻烦。在这个场合下,工厂方法和简单工厂没有区别。
有没有可能将需要创建类的类型传递到工厂方法中,由工厂方法根据类型返回对应的实例?
解决这个问题的关键是需要动态决定需要创建的类,这不是设计模式能解决的问题,属于软件平台的功能范畴。.NET可以提供相应的功能,即反射技术。
///<summary>
///交通工具工厂类
///</summary>
public class VehicleFactory
{
public static BaseVehicle Create(System.Type vehicleType)
{
BaseVehicle vehicle = null;
System.Reflection.ConstructorInfo constructor = vehicleType.GetConstructor(System.Type.EmptyTypes);
try
{
vehicle = constructor.Invoke(null) as BaseVehicle;
return vehicle;
}
catch
{
throw;
}
}
}
在使用时,只需要传入需要创建的类的类型即可:
static void Main(string[] args)
{
BaseVehicle car = VehicleFactory.Create(typeof(Car));
BaseVehicle truck = VehicleFactory.Create(typeof(Truck));
}