1、简单工厂模式:在业务逻辑中,通过参数控制实例化哪个类,从而将不同的业务分离,方便后期增加业务类型。
2、简单工厂模式一般创建工厂类(static方法),调用工厂实例化不同的子类对象,以多态返回相同父类的形式,调用子类中相同的方法,实现不同的业务
举例说明,汽车灯光,灯光控制系统就是一个工厂,管理远光灯,近光灯,转向灯,刹车灯,雾灯,双闪等,他们有一个共同点都是灯,但是灯光以及作用却不一样,各种灯光可以看做是不同的实例,不同的灯对应的开关,就是调用工厂类时需要传入的参数。
3、实例操作
(1)创建灯光父类,包含一个虚方法“开灯”
/// <summary>
/// 灯光基类
/// </summary>
public class CarLamp
{
public virtual string OpenLamp()
{
return "开启灯光";
}
}
(2)增加子类(远光灯类,近光灯类,刹车灯类,转向灯类),重写方法“开灯”,实现不同类型的灯光
/// <summary>
/// 远光灯
/// </summary>
public class HighBeamLight : CarLamp
{
public override string OpenLamp()
{
return "开启远灯光";
}
}
/// <summary>
/// 近光灯
/// </summary>
public class DippedHeadlight : CarLamp
{
public override string OpenLamp()
{
return "开启近灯光";
}
}
/// <summary>
/// 刹车灯
/// </summary>
public class StopLight : CarLamp
{
public override string OpenLamp()
{
return "开启刹车灯";
}
}
/// <summary>
/// 转向灯
/// </summary>
public class TurnLight : CarLamp
{
public override string OpenLamp()
{
return "开启转向灯";
}
}
(3)创建灯光工厂,声明父类型的对象,根据不同的参数,实例化对应的灯光子类
/// <summary>
/// 灯光工厂
/// </summary>
public class CarLampFactory
{
public static CarLamp CreateCarLamp(string strLampKind)
{
//声明父类型灯光
CarLamp carLamp = null;
//根据类型参数实例化对应灯光子类,并赋予父类型实体
switch (strLampKind)
{
case "近光灯":
carLamp = new DippedHeadlight();
Console.WriteLine("实例化【近光灯】子类 DippedHeadlight");
break;
case "远光灯":
carLamp = new HighBeamLight();
Console.WriteLine("实例化【远光灯】子类 DippedHeadlight");
break;
case "刹车灯":
carLamp = new StopLight();
Console.WriteLine("实例化【刹车灯】子类 DippedHeadlight");
break;
case "转向灯":
carLamp = new TurnLight();
Console.WriteLine("实例化【转向灯】子类 DippedHeadlight");
break;
default:
Console.WriteLine("暂无此类型灯光");
break;
}
return carLamp;
}
}
(4)业务中使用工厂类创建对应对象
static void Main(string[] args)
{
string strlampKind= Console.ReadLine();
CarLamp carLamp = CarLampFactory.CreateCarLamp(strlampKind);
string strOpenLamp = carLamp.OpenLamp();
Console.WriteLine("打开 {0}", strOpenLamp);
Console.ReadLine();
}
总之,我们在业务中要善于提炼共性和差异,适度使用设计模式,达到松耦合的目的,使项目更容易维护与扩展。