首页 > 其他 > 详细

3 工厂方法模式

时间:2016-07-04 18:33:32      阅读:179      评论:0      收藏:0      [点我收藏+]

简单工厂存在问题:对象统一行为抽象成一个接口(或者抽象类)之后,再根据传入的类型进行创建实例,但这只适用固定行为的场合,当要实现接口的类型处于不定数,则不适合使用简单工厂模式,而应该使用工厂方法

工厂方法适合场合:
子类有统一的操作行为
子类的数量不固定,随时可能有新的功能子类出现
工厂方法优势:
子类之间是并列的,耦合度比较大
创建具体对象方法灵活,可以使用反射或者第三方IOC容器

技术分享
  /// <summary>
    /// 菜抽象类
    /// </summary>
    public abstract class Food
    {
        //输出点了什么菜
        public abstract string Print();
    }
    public class TomatoScrambledEggs : Food
    {
        public override string  Print()
        {
            return "西红柿炒鸡蛋";
        }
    }
    public class ShreddedPorkWithPotatoes : Food
    {
        public override string Print()
        {
            return "土豆丝炒鸡蛋";
        }
    }
    /// <summary>
    /// 抽象工厂类
    /// </summary>
    public abstract class Creator
    {
        /// <summary>
        /// 工厂方法
        /// </summary>
        /// <returns></returns>
        public abstract Food CreateFoddFactory();
    }
    /// <summary>
    /// 西红柿炒鸡蛋工厂类
    /// </summary>
    public class TomatoScrambledEggsFactory : Creator
    {
        public override Food CreateFoddFactory()
        {
            return new TomatoScrambledEggs();
        }
    }
    /// <summary>
    /// 土豆丝炒鸡蛋工厂类
    /// </summary>
    public class ShreddedPorkWithPotatoesFactory:Creator
    {
        public override Food CreateFoddFactory()
        {
            return new ShreddedPorkWithPotatoes();
        }
    }
View Code

调用:

技术分享
  public void Get()
        {
            // 初始化做菜的两个工厂()
            Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory();
            Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory();

            // 开始做西红柿炒蛋
            Food tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoddFactory();
            string dd =  tomatoScrambleEggs.Print();

            //开始做土豆肉丝
            Food shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoddFactory();
           string dd2 =  shreddedPorkWithPotatoes.Print();
        }
View Code

 

缺点:

工厂方法是为了克服工厂模式的缺点而设计出来的,每个工厂方法每个具体工厂类只完成单个实例的创建,但是现实生活中,一个工厂只创建单个产品的例子太少啦,所以需要抽象工厂模式:

3 工厂方法模式

原文:http://www.cnblogs.com/niuzaihenmang/p/5641159.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!