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

     //运行结果

  • 相关阅读:
    玩转----使用数据驱动ddt时,如何写测试报告2种方法
    玩转----svn--入门
    玩转----Selenium家族简介
    起名的含义
    重新开始
    学习django: 庄园漫步
    测试常用的表格
    【Kata Daily 190927】Counting sheep...(数绵羊)
    【Kata Daily 190924】Difference of Volumes of Cuboids(长方体的体积差)
    【Kata Daily 190923】Odder Than the Rest(找出奇数)
  • 原文地址:https://www.cnblogs.com/duandian/p/2455692.html
Copyright © 2020-2023  润新知