zoukankan      html  css  js  c++  java
  • 抽象工厂模式(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();
            }
    

     //运行结果

  • 相关阅读:
    索引在什么情况下遵循最左前缀的规则?
    MySQL索引种类
    简述触发器、函数、视图、存储过程?
    6.Class 与 Style 绑定
    2.Javascript 函数(主要)
    Java的string类
    PHP+mysql注入的基本过程
    Android自动化测试Emmagee
    EclEmma的介绍、安装与使用
    软件测试方法
  • 原文地址:https://www.cnblogs.com/duandian/p/2455692.html
Copyright © 2011-2022 走看看