定义一个用于建立对象的接口,让子类决定实例化哪个类。Factory Method使得一个类的实例化延迟到子类(即:工厂子类)。ide
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;spa
namespace 工厂模式
{
class Program
{
static void Main(string[] args)
{
Factory factory = null;
Product product = null;
while (true)
{
Console.WriteLine("你想生产Car请按1键,想生产AirPlane请按2键,想生产Tank请按3键");
int num = int.Parse(Console.ReadLine());
switch (num)
{
case 1: factory = new FactoryCar(); product = factory.produc(); break;
case 2: factory = new FactoryAirPlane(); product = factory.produc(); break;
case 3: factory = new FactoryTank(); product = factory.produc(); break;代理
default: Console.WriteLine("请按1~3键"); break;对象
}
}
接口
Console.ReadLine();string
}产品
public static void print(string str)
{
Console.WriteLine(str);
}
}it
public abstract class Factory//工厂父类
{
public abstract Product produc();io
}class
public class FactoryCar : Factory//生产Car的工厂
{
public override Product produc()
{
Console.WriteLine("你生产了一辆车");
return new car();
}
}
public class FactoryAirPlane : Factory//生产Car的工厂
{
public override Product produc()
{
Console.WriteLine("你生产了一架飞机");
return new airplane();
}
}
public class FactoryTank : Factory//生产Tank的工厂
{
public override Product produc()
{
Console.WriteLine("你生产了一辆坦克");
return new Tank();
}
}
public abstract class Product//产品类
{
public abstract string production();//生产产品
}
public class car:Product//Car产品
{
public override string production()
{
return "car";
}
}
public class airplane:Product//飞机产品
{
public override string production()
{
return "airplane";
}
}
public class Tank : Product//坦克产品
{
public override string production()
{
return "tank";
}
}
}
Factory Method模式的两种状况:一是Creator类是一个抽象类且它不提供它所声明的工厂方法的实现;二是Creator是一个具体的类且它提供一个工厂方法的缺省实现。
工厂方法是能够带参数的。
工厂的做用并不单单只是建立一个对象,它还能够作对象的初始化,参数的设置等。
用工厂方法在一个类的内部建立对象一般比直接建立对象更灵活。
Factory Method模式经过面向对象的手法,将所要建立的具体对象的建立工做延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。
在如下状况下,适用于工厂方法模式: 1. 当一个类不知道它所必须建立的对象的类的时候。 2. 当一个类但愿由它的子类来指定它所建立的对象的时候。 3. 当类将建立对象的职责委托给多个帮助子类中的某一个,而且你但愿将哪个帮助子类是代理者这一信息局部化的时候。