简单工厂模式

简介:
+关注继续查看

 工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式,此篇我们来总结简单工程模式!

 简洁来说:简单工厂模式用来解决实例化的问题。例如:存在加法,减法、乘法、除法的类时,当要利用加法时,就需要工厂来对加法类进行实例化,并返回此实例,当要使用乘法,也需要工厂来对乘法类进行实例化,并返回实例。即:对于有选择性的去实例化类的操作都在一个【工厂类】中执行。
下面就看一个工厂类

复制代码
    public class OperateFactory
    {
        public static Operate GetInstace(string strOperate)
        {
            Operate oper = null;
            switch (strOperate)
            { 
                case "加法":
                    oper=new  OperateAdd();
                    break;
                case "减法":
                    oper=new OperateSubtraction();
                    break;
                default:
                   oper= null;
                    break;
            }
            return oper;
        }
    }
复制代码

  工厂类中进行逻辑判断,最终得到要实例化的对象!

下面就用一个计算的实例来介绍:

复制代码
    
//定义一个父类,来统一计算操作。
  public class Operate { private int _numberA; private int _numberB; public int numberA { set { _numberA = value; } get { return _numberA; } } public int numberB { set { _numberB = value; } get { return _numberB; } }      //其实可以将此类设置为抽象类,此方法设置为抽象方法,因为具体的实现都是在其派生类中进行的! public virtual int ObtainResult() {return 0; } }   //加法类 public class OperateAdd:Operate { public override int ObtainResult() { return base.numberA + base.numberB; } }   //减法类 public class OperateSubtraction : Operate { public override int ObtainResult() { return base.numberA - base.numberB; } }
上述代码中,Operate类统一了计算操作,其派生类OperateAdd和OperateSubtraction实现了具体的加法、减法操作。
  以上这段代码,用到了面向对象三大特性之一:继承。将所有派生类能用到的字段写在父类中,以减少之后派生类中代码的重写(numberA和numberB字段),派生类中重写了父类的虚方法ObtainResult,来实现具体的操作。其实就上述代码已经实现了面向对象的三大特性的全部,继承是显而易见,多态表现为父类Operate有多个派生类也就包含了多种状态,封装表现为每个派生类都对一种操作进行了封装(加法,减法)
复制代码

   其实以上的代码,就是面向对象的编程思想,如果现在想要做一个加法运算,我们可以new OperateAdd();减法运算则new OperateSubtraction();然后调用该实例的ObtainResult方法即可得到运算后的值。这样操作的弊端是:我们需要进行逻辑判断然后再显示的去指定到底该去实例化那一个操作类,必然会增加执行代码的条数和复杂程度。而简单工厂模式就是用来解决这个问题的,简单工厂模式的作用就是将逻辑判断和再显示的去指定该实例化的类封装在工厂类中。如下面的代码所示,在工厂类中增加一个静态的并返回值为Operate类型-具体操作类的父类,然后根据参数去来执行判断,最终决定到底对那个类进行实例化。

复制代码
    public class OperateFactory
    {
        public static Operate GetInstace(string strOperate)
        {
            Operate oper = null;
            switch (strOperate)
            { 
                case "加法":
                    oper=new  OperateAdd();
                    break;
                case "减法":
                    oper=new OperateSubtraction();
                    break;
                default:
                   oper= null;
                    break;
            }
            return oper;
        }
    }
复制代码

   如此一来,只需要 传递一个参数 给工厂类的静态方法,它内部根据传来的参数进行逻辑判定,最终得到对应的实例。

复制代码
        public int fun()
        {
            Operate op = OperateFactory.GetInstace("加法");
            op.numberA = 10;
            op.numberB = 5;
            return op.ObtainResult();
        }
复制代码

  

如果要对现有的功能进行扩展,即:添加除法、指数、开根号等操作时,只需要新建相应的操作类(继承Operate类),然后再在工厂类中添加相应的判断逻辑即可!



本文转自武沛齐博客园博客,原文链接:http://www.cnblogs.com/wupeiqi/p/3287676.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
编译器
简单工厂模式~
简单工厂模式~
|
2月前
浅谈工厂方法模式
浅谈工厂方法模式
|
2月前
浅谈简单工厂模式
浅谈简单工厂模式
|
3月前
|
前端开发
简单工厂模式
简单工厂模式
39 0
|
3月前
简单工厂模式
简单工厂模式
27 0
|
4月前
|
设计模式 算法 搜索推荐
工厂方法模式的两个极端
概念:是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。
|
4月前
|
设计模式
工厂方法模式详细介绍
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种将对象的创建逻辑封装在工厂类中的方式,使得客户端代码无需直接依赖具体的类来创建对象。
60 0
|
5月前
|
设计模式 监控 uml
剖析工厂方法模式、从开电脑店开始
工厂类负责把实例化类时,复杂的过程透明化,同时避免大量实例化类的重复代码的出现。
剖析工厂方法模式、从开电脑店开始
|
10月前
简单的工厂模式和工厂方法模式
简单的工厂模式和工厂方法模式
|
11月前
|
设计模式 关系型数据库 程序员
简单工厂模式、工厂模式、抽象工厂模式
简单工厂模式、工厂模式、抽象工厂模式
92 2
简单工厂模式、工厂模式、抽象工厂模式
推荐文章
更多