using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication1
{
    public interface 厨师接口
    {
        void 函数();
        面条接口 做面条();
        米饭接口 做米饭();
    }    class 南方厨师 : 厨师接口
    {
        public void 函数()
        {
            Console.WriteLine("南方厨师做南方菜");
        }
        public 面条接口 做面条()
        {
            Console.WriteLine("南方厨师做南方面条");
            面条接口 面条 = new 南方面条();
            return 面条;
        }
        public 米饭接口 做米饭()
        {
            Console.WriteLine("南方厨师做南方米饭");
            米饭接口 米饭 = new 南方米饭();
            return 米饭;
        }
    }
    //-----------------定义面条产品---------------------------------
    public interface 面条接口
    {
    }    class 北方面条 : 面条接口
    {
        public 北方面条()
        {
            Console.WriteLine("北方面条产生了");
        }
    }    class 南方面条 : 面条接口
    {
        public 南方面条()
        {
            Console.WriteLine("南方面条产生了");
        }
    }    //-----------------定义米饭产品---------------------------------
    public interface 米饭接口
    { }    class 北方米饭 : 米饭接口
    {
        public 北方米饭()
        {
            Console.WriteLine("北方米饭产生了");
        }
    }    class 南方米饭 : 米饭接口
    {
        public 南方米饭()
        {
            Console.WriteLine("南方米饭产生了");
        }
    }    class Program
    {
        static void Main(string[] args)
        {
            厨师接口 厨师 = new 南方厨师();
            厨师.函数();
            厨师.做米饭();
            厨师.做面条();
            Console.ReadLine();
        }
    }
}
1程序中是否存在不足的地方,请指正。
2你们觉得工厂的优点与缺点是什么。谢谢。

解决方案 »

  1.   

    推荐直接去微软的WEBCAST下李老师的《C#面向对象设计模式纵横谈》
    http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series/CsharpOOD.aspx
      

  2.   


         -------------简单工厂----------------interface 厨师接口
    {
        void 做饭();
        void 炒菜();
    }public class 南方厨师:厨师接口
    {
        void 做饭()
        {
            Console.WriteLine("南方厨师做南方饭");
        }
        void 炒菜()
        {
            Console.WriteLine("南方厨师炒南方菜");
        }
    }
    public class 北方厨师:厨师接口
    {
        void 做饭()
        {
            Console.WriteLine("北方厨师做南方饭");
        }
        void 炒菜()
        {
            Console.WriteLine("北方厨师炒南方菜");
        }
    }public class Factory
    {
         public static 厨师接口 CreateChef(厨师类型标志 type)
         {
             switch(type)//根据不同的参数实例化不同的子类
             {
                 case "南方": return new 南方厨师();
                 case "北方": return new 北方厨师();
                 default:throw new Exception("没有这类厨师...");
             }
         }
    }
    class Program
        {
            static void Main(string[] args)
            {
                厨师接口 厨师 = Factory.CreateChef("南方");//这里就可以根据不同的参数,得到不同的子类
                厨师.做饭();//因为多态性,他会根据不同的子类,调用不同的方法
                厨师.做炒菜();
                Console.ReadLine();
            }
        }
      

  3.   

    抽象工厂是用配置文件+反射来实现的,他创建实例时并不是直接通过new 来创建,而是通过反射来创建
      

  4.   

    又改了一下哦,大家看看如何。 谢谢Hero和大家。
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;namespace ConsoleApplication1
    {
        public interface 厨师接口
        {
            void 函数();
            面条接口 做面条();
            米饭接口 做米饭();
        }    class 南方厨师 : 厨师接口
        {
            public void 函数()
            {
                Console.WriteLine("南方厨师做南方菜");
            }
            public 面条接口 做面条()
            {
                Console.WriteLine("南方厨师做南方面条");
                面条接口 面条 = new 南方面条();
                return 面条;
            }
            public 米饭接口 做米饭()
            {
                Console.WriteLine("南方厨师做南方米饭");
                米饭接口 米饭 = new 南方米饭();
                return 米饭;
            }
        }    class 北方厨师 : 厨师接口
        {
            public void 函数()
            {
                Console.WriteLine("北方厨师做南方菜");
            }
            public 面条接口 做面条()
            {
                Console.WriteLine("北方厨师做南方面条");
                面条接口 面条 = new 北方面条();
                return 面条;
            }
            public 米饭接口 做米饭()
            {
                Console.WriteLine("北方厨师做南方米饭");
                米饭接口 米饭 = new 北方米饭();
                return 米饭;
            }
        }
        //-----------------定义面条产品---------------------------------
        public interface 面条接口
        {
        }    class 北方面条 : 面条接口
        {
            public 北方面条()
            {
                Console.WriteLine("北方面条产生了");
            }
        }    class 南方面条 : 面条接口
        {
            public 南方面条()
            {
                Console.WriteLine("南方面条产生了");
            }
        }    //-----------------定义米饭产品---------------------------------
        public interface 米饭接口
        { }    class 北方米饭 : 米饭接口
        {
            public 北方米饭()
            {
                Console.WriteLine("北方米饭产生了");
            }
        }    class 南方米饭 : 米饭接口
        {
            public 南方米饭()
            {
                Console.WriteLine("南方米饭产生了");
            }
        }    class Program
        {
            static void Main(string[] args)
            {
                //厨师接口 厨师 = new 南方厨师();
                //厨师.函数();
                //厨师.做米饭();
                //厨师.做面条();
                //Console.ReadLine();
                北方厨师做菜();
                南方厨师做菜();
                Console.ReadLine();            Console.WriteLine("南北方厨师一起做菜\n");
                Thread 南方 = new Thread(南方厨师做菜);
                Thread 北方 = new Thread(北方厨师做菜);
                南方.Start();
                北方.Start();
                Console.WriteLine();            继续等待:
                if (南方.ThreadState == ThreadState.Stopped && 北方.ThreadState == ThreadState.Stopped)
                {
                    Console.WriteLine("南北方厨师都做完了");
                }
                else
                {
                    goto 继续等待;
                }            Console.ReadLine();
            }
            private static void 北方厨师做菜()
            {
                Console.WriteLine("北方厨师开始了");
                厨师接口 北方厨师 = new 北方厨师();
                北方厨师.函数();
                北方厨师.做米饭();
                北方厨师.做面条();
                Console.WriteLine("北方厨师做完了");
                return;
            }        private static void 南方厨师做菜()
            {
                Console.WriteLine("南方厨师开始了");
                厨师接口 南方厨师 = new 南方厨师();
                南方厨师.函数();
                南方厨师.做米饭();
                南方厨师.做面条();
                Console.WriteLine("南方厨师做完了");
                return;
            }
        }}
      

  5.   

    简单工厂:http://www.cnblogs.com/bit-sand/archive/2008/01/25/simple_Factory_Pattern.html
    抽象工厂:http://www.cnblogs.com/terrylee/archive/2005/12/13/295965.html