C#设计模式学习小结之一 工厂模式

简单工厂模式     工厂方法负责生产,操作简单但不符合OCP原则

 class Program
    {
        static void Main(string[] args)
        {
            Calculator c = CalculatorFactory.CalculatorCreator("add");
            c.A = 1;
            c.B = 2;
            Console.WriteLine(c.cal());
        }
    }

    class CalculatorFactory
    {
        public static Calculator CalculatorCreator(string type)
        {
            switch (type.ToLower())
            {
                case "add": return new Add();
                case "sub": return new Sub();
                default: return new Add();
            }
        }
    }

    abstract class Calculator
    {
        double a, b;

        public double B
        {
            get { return b; }
            set { b = value; }
        }

        public double A
        {
            get { return a; }
            set { a = value; }
        }

        public abstract double cal();
    }

    class Add : Calculator
    {
        public override double cal()
        {
            return (A + B);
        }
    }

    class Sub : Calculator
    {
        public override double cal()
        {
            return (A - B);
        }
    }



工厂方法模式      配合反射可以动态生产了

 class Program
    {
        static void Main(string[] args)
        {
            CalculatorFactory cf = new AddFactory();
            Calculator c = cf.CalculatorCreator();
            c.A = 1;
            c.B = 2;
            Console.WriteLine(c.cal());
        }
    }

    interface CalculatorFactory
    {
        Calculator CalculatorCreator();
    }

    class AddFactory : CalculatorFactory
    {
        public Calculator CalculatorCreator()
        {
            return new Add();
        }
    }

    class SubFactory : CalculatorFactory
    {
        public Calculator CalculatorCreator()
        {
            return new Sub();
        }
    }

    abstract class Calculator
    {
        double a, b;

        public double B
        {
            get { return b; }
            set { b = value; }
        }

        public double A
        {
            get { return a; }
            set { a = value; }
        }

        public abstract double cal();
    }

    class Add : Calculator
    {
        public override double cal()
        {
            return (A + B);
        }
    }

    class Sub : Calculator
    {
        public override double cal()
        {
            return (A - B);
        }
    }


反射

 <appSettings>
    <add key="FactoryMethod" value="AddFactory" />
  </appSettings>

 string typeName = "ConsoleApplication1." + ConfigurationSettings.AppSettings["FactoryMethod"];
            CalculatorFactory cf = (CalculatorFactory)Assembly.Load("ConsoleApplication1").CreateInstance(typeName);
            Calculator c = cf.CalculatorCreator();
            c.A = 1;
            c.B = 2;
            Console.WriteLine(c.cal());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值