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

本文介绍了简单工厂模式和工厂方法模式的实现方式,并通过示例代码展示了如何使用这两种模式来创建不同类型的计算器实例。同时,还介绍了如何利用反射机制来实现工厂方法模式的动态生产。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单工厂模式     工厂方法负责生产,操作简单但不符合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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值