设计模式实例-工厂方法模式

来源:互联网 发布:一个域名成就一个梦想 编辑:程序博客网 时间:2024/06/04 23:22
using System;namespace Ahoo.Demo.DesignPatterns.Patterns.FactoryMethod{    /*######工厂方法模式#######     * 定义一个用于创建对象的接口,     * 让子类觉得实例化哪个类。     * 使类的实例化延迟到子类     */    #region 操作类    /// <summary>    /// 抽象类    /// </summary>    public abstract class Operation    {        public double FirstNumber { get; set; }        public double SecondNumber { get; set; }        public abstract double GetResult();    }    public class AddOperation : Operation    {        public override double GetResult()        {            double result = FirstNumber + SecondNumber;            return result;        }    }    /// <summary>    /// 具体操作子类(-)    /// </summary>    public class SubOperation : Operation    {        public override double GetResult()        {            double result = FirstNumber - SecondNumber;            return result;        }    }    /// <summary>    /// 具体操作子类(*)    /// </summary>    public class MulOperation : Operation    {        public override double GetResult()        {            double result = FirstNumber * SecondNumber;            return result;        }    }    /// <summary>    /// 具体操作子类(/)    /// </summary>    public class DivOperation : Operation    {        public override double GetResult()        {            if (SecondNumber == 0)            {                throw new ArgumentException("参数[SecondNumber]不能为0!");            }            double result = FirstNumber / SecondNumber;            return result;        }    }    #endregion    /// <summary>    /// 工厂接口    /// </summary>    interface IFactory    {        Operation CreateOperation();    }    public class AddFactory : IFactory    {        public Operation CreateOperation()        {            return new AddOperation();        }    }    public class SubFactory : IFactory    {        public Operation CreateOperation()        {            return new SubOperation();        }    }    public class AddFactory : IFactory    {        public Operation CreateOperation()        {            return new AddOperation();        }    }    public class MulFactory : IFactory    {        public Operation CreateOperation()        {            return new MulOperation();        }    }    public class DivFactory : IFactory    {        public Operation CreateOperation()        {            return new DivOperation();        }    }    public class Client    {        public static void Excute()        {            IFactory factory = new AddFactory();            Operation operation = factory.CreateOperation();            Console.WriteLine("请输入操作符 第一个操作数");            operation.FirstNumber = Double.Parse(Console.ReadLine());            Console.WriteLine("请输入操作符 第二个操作数");            operation.SecondNumber = Double.Parse(Console.ReadLine());            Console.WriteLine("结果为:{0}", operation.GetResult());        }    }}
0 0
原创粉丝点击