抽象工厂模式(Abstract Factory Pattern)
一、介绍
抽象工厂是个一个工厂对象,其返回几级组类中的一组。
二、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(); }
//运行结果