工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)应用。
代码
public
abstract
class
Product
{
private string productA;
public string ProductA
{
get { return this .productA; }
set { this .productA = value; }
}
private string productB;
public string ProductB
{
get { return this .productB; }
set { this .productB = value; }
}
public abstract void PrintProductMessage();
}
public class Operate1:Product
{
public override void PrintProductMessage()
{
Console.WriteLine(ProductA);
}
}
public class Operate2:Product
{
public override void PrintProductMessage()
{
Console.WriteLine(ProductB);
}
}
public interface IFactory
{
Product CreateClass();
}
public class Factory1 : IFactory
{
public Product CreateClass()
{
return new Operate1();
}
}
public class Factory2 : IFactory
{
public Product CreateClass()
{
return new Operate2();
}
}
class Program
{
static void Main( string [] args)
{
Factory1 f1 = new Factory1();
Factory2 f2 = new Factory2();
Product pro = f1.CreateClass();
pro.ProductA = " 产品1 " ;
pro.ProductB = " 产品2 " ;
pro.PrintProductMessage();
Console.ReadLine();
}
}
{
private string productA;
public string ProductA
{
get { return this .productA; }
set { this .productA = value; }
}
private string productB;
public string ProductB
{
get { return this .productB; }
set { this .productB = value; }
}
public abstract void PrintProductMessage();
}
public class Operate1:Product
{
public override void PrintProductMessage()
{
Console.WriteLine(ProductA);
}
}
public class Operate2:Product
{
public override void PrintProductMessage()
{
Console.WriteLine(ProductB);
}
}
public interface IFactory
{
Product CreateClass();
}
public class Factory1 : IFactory
{
public Product CreateClass()
{
return new Operate1();
}
}
public class Factory2 : IFactory
{
public Product CreateClass()
{
return new Operate2();
}
}
class Program
{
static void Main( string [] args)
{
Factory1 f1 = new Factory1();
Factory2 f2 = new Factory2();
Product pro = f1.CreateClass();
pro.ProductA = " 产品1 " ;
pro.ProductB = " 产品2 " ;
pro.PrintProductMessage();
Console.ReadLine();
}
}