朱利IT博客首页 | 设计模式 | 数据库 | 框架开发| 程序优化 | 控件学习 | 心得体会 | 给我留言

工厂方法模式-想吃什么汉堡自己要

工厂方法模式比喻
请女生去麦当劳吃汉堡,不同的女生有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method-工厂方法模式,带着女孩到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让女生直接跟服务员说就行了。

工厂方法模式意图
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

工厂方法模式类图 
www.zhuli8.com-朱利IT博客
 
 
工厂方法模式实现
     /// <summary>
    /// 工厂方法模式中,提供不同的女孩不同的口味的汉堡,相当于我的职责
    /// </summary>
    interface IGirl
    {
        IHamburg DemandHamburg();
    }
    /// <summary>
    /// 喜欢吃第一种汉堡的女孩
    /// </summary>
    class Girl1 : IGirl
    {
        public IHamburg DemandHamburg()
        {
            return new Hamburg1();
        }
    }
    /// <summary>
    /// 喜欢吃第二种汉堡的女孩
    /// </summary>
    class Girl2 : IGirl
    {
        public IHamburg DemandHamburg()
        {
            return new Hamburg2();
        }
    }
    /// <summary>
    /// 不同口味汉堡的抽象
    /// </summary>
    interface IHamburg
    {
        void ImproveHamburg();
    }
    /// <summary>
    /// 第一种口味汉堡
    /// </summary>
    class Hamburg1 : IHamburg
    {
        public void ImproveHamburg()
        {
            Console.WriteLine("提供第一种口味女孩的汉堡");
        }
    }
    /// <summary>
    /// 第二种口味汉堡
    /// </summary>
    class Hamburg2 : IHamburg
    {
        public void ImproveHamburg()
        {
            Console.WriteLine("提供第二种口味女孩的汉堡");
        }
    }
    /// <summary>
    /// 工厂方法模式客户端应用
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //喜欢第一种口味汉堡的女孩子
            IGirl girl = new Girl1();
            //提供女生喜欢的汉堡
            IHamburg hamburg=girl.DemandHamburg();
            hamburg.ImproveHamburg();
            Console.Read();
        }
    }
 
工厂方法模式总结
我不再负责记住每个女孩想吃什么口味的汉堡了,而是将每个女孩想吃什么口味的汉堡交给她们自己去做。即系统中的核心工厂类不再负责所有产品的创建,而是将具体的创建工作交给子类,核心工厂类仅仅负责给出具体工厂类实现的接口,成为一个抽象工厂角色,而不接触哪一个产品类应当被实例化的细节。
posted @ 2011-12-30 08:04  木子朱  阅读(1482)  评论(4编辑  收藏  举报

朱利IT博客首页 | 设计模式 | 数据库 | 框架开发| WPF| WCF| IBatisNet| 程序优化 | 控件学习 | 心得体会 | 给我留言