代码
using System;
using System.Collections.Generic;
/// <summary>
/// 定义抽象类
/// </summary>
public abstract class Log
{
public abstract void Write();
}
public class EventLog:Log
{
public override void Write()
{
Console.WriteLine("EventLog Write Success");
}
}
public class FileLog:Log
{
public override void Write()
{
Console.WriteLine("FileLog Write Success");
}
}
/// <summary>
/// 抽象工厂
/// </summary>
public abstract class LogFactory
{
public abstract Log Create();
}
public class EventFactory:LogFactory
{
public override EventLog Create()
{
return new EventLog();
}
}
public class FileFactory:LogFactory
{
public override FileLog Create()
{
return new FileLog();
}
}
using System.Collections.Generic;
/// <summary>
/// 定义抽象类
/// </summary>
public abstract class Log
{
public abstract void Write();
}
public class EventLog:Log
{
public override void Write()
{
Console.WriteLine("EventLog Write Success");
}
}
public class FileLog:Log
{
public override void Write()
{
Console.WriteLine("FileLog Write Success");
}
}
/// <summary>
/// 抽象工厂
/// </summary>
public abstract class LogFactory
{
public abstract Log Create();
}
public class EventFactory:LogFactory
{
public override EventLog Create()
{
return new EventLog();
}
}
public class FileFactory:LogFactory
{
public override FileLog Create()
{
return new FileLog();
}
}
可以这么去理解,“抽象工厂模式”这个称呼中的“抽象”是一个动词,即对工厂方法模式进行了抽象,就变成了抽象工厂模式,这么理解后,就不难看出它们的区别:
工厂方法模式:每个抽象产品派生多个具体产品类,每个抽象工厂类派生多个具体工厂类,每个具体工厂类负责一个具体产品的实例创建;
抽象工厂模式:每个抽象产品派生多个具体产品类,每个抽象工厂派生多个具体工厂类,每个具体工厂负责多个(一系列)具体产品的实例创建。
你在下面所说的一句话“抽象工厂的具体工厂经常实现工厂方法来创建他的产品”,这句话里面的“工厂方法”仅仅是对一类方法的称呼,此处的“工厂方法”与“工厂方法模式”无关,即便在简单工厂模式中,也会有工厂方法这一说。