单工厂的缺点是:当添加一个新的产品时需要修改工厂类,这样就违背了开闭原则。工厂模式就是为了解决这一缺陷而出现的,解决的方法是把创建具体实例的任务放在了工厂的子类中,工厂只提供了创建实例的的接口。
abstract class Factory
{
public abstract Car CreateCar(int number);
}
class 大众Factory : Factory
{
public override Car CreateCar(int number)
{
return new 大众(number);
}
}
class 宝马Factry : Factory
{
public override Car CreateCar(int number)
{
return new 宝马(number);
}
}
abstract class Car
{
public int number;
public Car(int n)
{
number = n;
}
public abstract void Msg();
}
class 大众 : Car
{
public 大众(int number) : base(number) { }
public override void Msg()
{
Console.WriteLine(number + " 一汽大众!");
}
}
class 宝马 : Car
{
public 宝马(int number) : base(number) { }
public override void Msg()
{
Console.WriteLine(number + " 华晨宝马!");
}
}
工厂模式的优点:
工厂模式有效地解决了添加新产品必须要修改工厂类代码的问题,符合设计原则中的开闭原则。
工厂模式的缺点:
工厂模式的本质是将具体实例的创建工作放在了具体子类工厂中进行,这造成一个新的问题:将选择实例类型的任务交给了客户端,如我们想生产一个大众,就必须在客户端new一个大众工厂。如果new了100个大众工厂,这时要换到宝马怎么办?只能把大众Factory一个一个地替换成宝马Factory。所以简单工厂和工厂模式都不是完美的,我们应该根据具体的情况来选择。
网友评论