工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
/// <summary>
/// 雷锋
/// </summary>
class LeiFeng
{
private string name = string.Empty;
public string Name {
get { return name; }
set { name = value; }
}
public virtual void Sweep()
{
Console.WriteLine("扫地");
}
public virtual void Wash()
{
Console.WriteLine("洗衣");
}
public virtual void BuyRice()
{
Console.WriteLine("买米");
}
}
/// <summary>
/// 学雷锋的大学生
/// </summary>
class Undergraduate : LeiFeng
{
public override void Sweep()
{
Console.WriteLine("大学生"+Name+"来扫地");
}
public override void Wash()
{
Console.WriteLine("大学生" + Name + "来洗衣");
}
public override void BuyRice()
{
Console.WriteLine("大学生" + Name + "来买米");
}
}
/// <summary>
/// 学雷锋的志愿者
/// </summary>
class Volunteer : LeiFeng
{
public override void Sweep()
{
Console.WriteLine("志愿者" + Name + "来扫地");
}
public override void Wash()
{
Console.WriteLine("志愿者" + Name + "来洗衣");
}
public override void BuyRice()
{
Console.WriteLine("志愿者" + Name + "来买米");
}
}
/// <summary>
/// 雷锋工厂
/// </summary>
interface IFactory
{
LeiFeng CreateLeiFeng();
}
/// <summary>
/// 学雷锋的大学生工厂
/// </summary>
class UndergraduateFactory : IFactory
{
public LeiFeng CreateLeiFeng()
{
return new Undergraduate();
}
}
/// <summary>
/// 社区志愿者工厂
/// </summary>
class VolunteerFactory : IFactory
{
public LeiFeng CreateLeiFeng()
{
return new Volunteer();
}
}
/// <summary>
/// 程序主体
/// </summary>
class Program
{
static void Main(string[] args)
{
IFactory factory = new UndergraduateFactory();
var leifeng = factory.CreateLeiFeng();
leifeng.Name = " 张三 ";
leifeng.Sweep();
IFactory factory1 = new VolunteerFactory();
var leifeng1 = factory1.CreateLeiFeng();
leifeng1.Name = " 李四 ";
leifeng1.BuyRice();
Console.Read();
}
}
运行结果: