设计模式-工厂方法模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-工厂方法模式相关的知识,希望对你有一定的参考价值。

public interface IYunSuan
    {
        double getResult(int num1, int num2);        
    }
    public class jia : IYunSuan
    {
        public double getResult(int num1, int num2)
        {
            return num1 + num2;
        }
    }
    public class jian : IYunSuan
    {
        public double getResult(int num1, int num2)
        {
            return num1-num2;
        }
    }
    public class cheng : IYunSuan
    {
        public double getResult(int num1, int num2)
        {
            return num1*num2;
        }
    }
    public class chu : IYunSuan
    {
        public double getResult(int num1, int num2)
        {
            if (num2 == 0) return 0;
            return num1/num2;
        }
    }

    //////////////
     //简单工厂,专门生产对象
        public static IYunSuan createYunSuanObj(string type)
        {
            switch (type)
            {
                case "+":return new jia();
                case "-": return new jian();
                case "*": return new cheng();
                case "/": return new chu();
            }
            return null;
        }
    //工厂方法模式,把简单工厂分解
    public interface IFactory
    {
        IYunSuan createYunSuanObj();
    }
    public class jiaFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new jia();
        }
    }
    public class jianFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new jian();
        }
    }
    public class chengFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new cheng();
        }
    }
    public class chuFactory : IFactory
    {
        public IYunSuan createYunSuanObj()
        {
            return new chu();
        }
    }

        前端:
        static void Main(string[] args)
        {
            //简单工厂模式
            //var jia=simpleFactory.createYunSuanObj("+");
            //var result=jia.getResult(1,2);
            //Console.WriteLine(result);
            //Console.ReadLine();
                        //工厂方法模式
            IFactory factory = new jiaFactory();
            var jia=factory.createYunSuanObj();
            var result=jia.getResult(1, 2);
            Console.WriteLine(result);
            Console.ReadLine();
        }

总结:是基于简单工厂的扩展模式,解耦了简单工厂的工厂类,符合了几大原则
优点:解耦
缺点:代码量增加N多,让人蛋疼。

技术分享图片

以上是关于设计模式-工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式---工厂模式

设计模式-工厂方法模式(Go实现)

设计模式之工厂方法和抽象工厂

案例分析:设计模式与代码的结构特性——工厂方法模式

工厂方法模式