简单工厂模式是设计模式中比较常用也比较简单的一种,它并不包含在23中设计模式之中。
下面给出它的一般实现(C#):
namespace ConsoleTest
{
public class SimpleFactoryTest
{
public void Test()
{
//生产一辆宝马车,并驾驶
CarSimpleFactory.Produce("bmw").Drive();
Console.Read();
}
}
/// <summary>
/// 表示汽车类的简单工厂。
/// </summary>
class CarSimpleFactory
{
/// <summary>
/// 工厂生成汽车的方法。
/// </summary>
/// <param name="carName">汽车名称。</param>
/// <returns>根据汽车名称生成汽车。</returns>
public static Car Produce(string carName)
{
Car car=null;
switch(carName)
{
case "bens":
car = new Bens();
break;
case "bmw":
car= new BMW();
break;
default:
car = new Bens();
break;
}
return car;
}
}
/// <summary>
/// 抽象的汽车类。
/// </summary>
class Car
{
/// <summary>
/// 汽车的驾驶方法。
/// </summary>
virtual public void Drive()
{
Console.WriteLine("car drive");
}
}
/// <summary>
/// 宝马车。
/// </summary>
class BMW : Car
{
/// <summary>
/// 宝马车的驾驶方法。
/// </summary>
public override void Drive()
{
Console.WriteLine("bmw drive");
}
}
/// <summary>
/// 奔驰车。
/// </summary>
class Bens : Car
{
/// <summary>
/// 奔驰车的驾驶方法。
/// </summary>
public override void Drive()
{
Console.WriteLine("bens drive");
}
}
}
优缺点简单分析:
1、该模式属于创建型模式,该模式将对象的创建工作封装起来,可以降低耦合度,并且代码写起来会比较简便。
2、该模式违反了开/闭原则,在上例中如果想增加“大众”汽车,那么就不得不修改工厂的produce方法,不利于扩展。
简单工厂模式就介绍到这里,在后面的文章中会介绍工厂方法模式和抽象工厂模式。