一、介绍
抽象工厂是个一个工厂对象,其返回几级组类中的一组。
二、UML图

三、示例
//动物
/// <summary>
/// 抽象类
/// </summary>
public abstract class AbstractAnimal
{
public abstract string GetName();
}
/// <summary>
/// 狗类
/// </summary>
public class Dog : AbstractAnimal
{
public override string GetName()
{
return "Dog";
}
}
/// <summary>
/// 猫
/// </summary>
public class Cat : AbstractAnimal
{
public override string GetName()
{
return "Cat";
}
}
//行为
/// <summary>
/// 抽象类
/// </summary>
public abstract class AbstractAction
{
public abstract string GetAction();
}
/// <summary>
/// 狗啃骨头
/// </summary>
public class DogAction : AbstractAction
{
public override string GetAction()
{
return "啃骨头";
}
}
/// <summary>
/// 猫吃鱼
/// </summary>
public class CatAction : AbstractAction
{
public override string GetAction()
{
return "吃鱼";
}
}
//工厂
/// <summary>
/// 动物工厂
/// </summary>
public abstract class AbstractAnimalFactory
{
/// <summary>
/// 创建动物
/// </summary>
/// <returns></returns>
public abstract AbstractAnimal CreateAnimal();
/// <summary>
/// 得到行为
/// </summary>
/// <returns></returns>
public abstract AbstractAction GetAction();
}
/// <summary>
/// 狗工厂
/// </summary>
public class DogFactory : AbstractAnimalFactory
{
public override AbstractAnimal CreateAnimal()
{
return new Dog();
}
public override AbstractAction GetAction()
{
return new DogAction();
}
}
/// <summary>
/// 猫工厂
/// </summary>
public class CatFactory : AbstractAnimalFactory
{
public override AbstractAnimal CreateAnimal()
{
return new Cat();
}
public override AbstractAction GetAction()
{
return new CatAction();
}
}
//program
static void Main(string[] args)
{
AbstractAnimalFactory aaf = new DogFactory();
AbstractAnimal aa=aaf.CreateAnimal();
AbstractAction ac=aaf.GetAction();
Console.WriteLine(aa.GetName() + ac.GetAction());
aaf = new CatFactory();
aa = aaf.CreateAnimal();
ac = aaf.GetAction();
Console.WriteLine(aa.GetName() + ac.GetAction());
Console.ReadLine();
}
//运行结果
