简单工厂模式

来源:互联网 发布:淘宝家装物流 编辑:程序博客网 时间:2024/06/06 03:12

实例:

实现一个简单的计算器


UML类图:



实现代码:

public class Operation    {        private double _numberA = 0;        private double _numberB = 0;                /// 数字A        public double NumberA        {            get            {                return _numberA;            }            set            {                _numberA = value;            }        }        /// 数字B        public double NumberB        {            get            {                return _numberB;            }            set            {                _numberB = value;            }        }        /// 得到运算结果        public virtual double getResult()        {            double result = 0;             return result;        }           }

    /// 加法类    class OperationAdd : Operation    {        public override double getResult()        {            double result = 0;             result = NumberA + NumberB;            return result;        }    }    /// 减法类    class OperationSub : Operation    {       public override double getResult()        {            double result = 0;            result = NumberA - NumberB;            return result;        }    }    /// 乘法类    class OperationMul : Operation    {        public override double getResult()        {            double result = 0;            result = NumberA * NumberB;            return result;        }    }    /// 除法类    class OperationDiv : Operation    {        public override double getResult()        {            double result = 0;            if (NumberB==0)                throw new Exception("除数不能为0。");            result = NumberA / NumberB;            return result;        }    }

    /// 运算类工厂    class OperationFactory    {        public static Operation createOperate(string operate)        {            Operation oper = null;            switch (operate)            {                case "+":                    {                        oper = new OperationAdd();                        break;                    }                case "-":                    {                        oper = new OperationSub();                        break;                    }                case "*":                    {                        oper = new OperationMul();                        break;                    }                case "/":                    {                        oper = new OperationDiv();                        break;                    }            }            return oper;        }    }}

客户端代码:

     Operation oper;     oper = OperationFactory.createOperate("+");                     oper.NumberA = 1;     oper.NumberB = 2;     double result = oper.getResult();

说明:

简单工厂模式的实质是由一个工厂类(OperationFactory)根据传入的参数,动态决定应该创建哪一个产品类(如OperationAdd等)(这些产品类继承自一个父类(Operation)或接口)的实例。


该模式中包含的角色及其职责

工厂(Creator)角色(本例中为OperationFactory)
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。

抽象产品(Product)角色(本例中为Operation)
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色(本例中为OperationAdd等)
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。


参考资料

-《大话设计模式》

1 0