抽象工厂模式(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();
        }

 //运行结果

 

posted @ 2012-04-18 17:45  ヾJ﹍Hヾ  阅读(185)  评论(0编辑  收藏  举报