简单工厂类:【图】
功能:负责大量的有着共同接口的类的实例化。工厂模式可以动态的决定哪一个类实例化。
角色:
工厂类角色:直接控制创建产品对象
抽象产品角色:创建父类和他们共同拥有的接口
具体产品角色:定义具体加工出来的产品对象
例如:无论哪一种灯具都有的共性开灯和关灯的功能。抽象出一个Light的类这个类中有两个方法,TurnOn();和TurnOff();方法。那么在父类中我们可以这样定义
public class Light
{
//提供开启和关闭方法。
public virtual void TurnOn() { } //这里可以使用virtual方法那么在这个类里面就可以对其他一些方法进行实例化。如果使用abstract那么类也需要抽象方法,类中不能 对 方 法实现
public virtual void TurnOff() { }
//创建实例的方法
public static Light CreateInstance(string type)
{
if (type == "BulbLight")
{
return new BulbLight();
}
if (type == "TubeLight")
{
return new TubeLight();
}
else
{
return null;
}
}
}
那没再子类中无论是白炽灯还是日光灯,在子类继承上面的Light方法并且完成上面的方法
灯1:
public class BulbLight : Light
{
//重写方法
public override void TurnOn()
{
Console.WriteLine("BulbLight is turnON");
}
public override void TurnOff()
{
Console.WriteLine("BulbLight is turnOff");
}
}
灯2:
public class TubeLight : Light
{
//重写方法
public override void TurnOn()
{
Console.WriteLine("TubeLight is turnOn");
}
public override void TurnOff()
{
Console.WriteLine("TubeLight is turnOff");
}
}
客户端访问:
static void Main(string[] args)
{ //简单工厂方法
//SimpleFactory sf = new SimpleFactory();
//(sf.CreateInstance("BulbLight")).TurnOn();
//(sf.CreateInstance("BulbLight")).TurnOff();
//Console.WriteLine("-------------------------------");
//(sf.CreateInstance("TubeLight")).TurnOn();
//(sf.CreateInstance("TubeLight")).TurnOff();
//Console.ReadLine();
(Light.CreateInstance("BulbLight")).TurnOn();
(Light.CreateInstance("BulbLight")).TurnOff();
Console.WriteLine("-------------------------------");
(Light.CreateInstance("TubeLight")).TurnOn();
(Light.CreateInstance("TubeLight")).TurnOff();
Console.ReadLine();
}
这种工厂的优点在于:客户比用直接创建产品对象,实现了对责任的分割