您的位置:首页 > 编程语言 > C#

简单工厂模式

2016-06-07 19:50 281 查看


//1简单工厂模式
/*模式定义:
定义:
专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口。
简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,
通常根据一个条件(参数)来返回不同的类的实例。
优缺点:
优点:
简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,
外界可以从直接创建具体产品对 象的尴尬局面中摆脱出来。

外界与具体类隔离开来,偶合性低。

明确区分了各自的职责和权力,有利于整个软件体系结构的优化。

 
缺点:
工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则

虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。
它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类了。
(这个问题在下一个工厂方法模式将得到很好的解决)

应用情景
工厂类负责创建的对象比较少

客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心

 
*/
namespace SimpleFactory
{
    public  class Operation//运算抽象类,定义抽象方法,用于子类重载。
    {
       public double NumberA{get;set;}
       public double NumberB{get;set;}
 
        public virtual double GetResult() {
            double result = 0;
            return result;
        }
    }
//以下为加减乘除四各类,采用继承方法,重写GertResult方法,并返回result(double类型)
    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 OperationMulti:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumberA * NumberB;
            return result;
        }
    }
    class OperationDiv:Operation
    {
        public override double GetResult()
        {
            if (NumberB==0)
            {
                throw new Exception("除数不能为0!");
            }
            else
            {
                double result = 0;
                result = NumberA / NumberB;
                return result;
            }
        }
    }
}
//运算工厂类
namespace SimpleFactory
{
    public class OperationFactory//改类与operation类之间是依赖关系。
    {
        public static Operation CreateOperate(string operate) {
            Operation oper = null;
            switch (operate)//根据字符串的不同,case判断产生不同的对象,以此实现简单工厂模式。
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationSub();
                    break;
                case "*":
                    oper = new OperationMulti();
                    break;
                case "/":
                    oper = new OperationDiv();
                    break;
                default:
                    break;
            }
            return oper;
        }
    }
//客户端
Operation oper = new Operation();
     oper = OperationFactory.CreateOperate("+");

     oper.NumberA = 1;
     oper.NumberB = 2;
     double result=oper.GetResult();
 Console.Read();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息