工厂模式在项目优化中的简单应用

     最近在项目中优化中用到了设计模式中用到工厂设计模式,在此说说自己的看法,看以前师兄写的代码真的不堪入目啊,没一点结构化分模块的意思。整个代码都是从头写到尾,而且代码命名也不规范,从没考虑到优化代码的问题,不是科班出身俺的还是有很多要学习的地方。项目是关于高精度检测方面的。我主要是把算法分成相关模块进行优化。先简单的上个UML图。

 先定义一个抽象类Measure,当然这个类中还包括具体算法实现

 protected abstract class Measure
    {  
//用来实现具体的测量尺寸,延迟在子类实现
   public  abstract  double MeasureModule(string name);
    }
View Code

然后我们可以定义不同的模块类继承自Measure,实现我们要测量的尺寸,例如我们可以定义一个具体的长度模块:

 public   class ConcreteLength:Measure
    {
       
      //这个函数包括具体的测量模块中尺寸的算法实现。根据参数name确定实现具体的尺寸。
       public override double MeasureModule(string name)
        {
        
        }
           
     }
    }
View Code

 气门尺寸的模块分的不是很多,总共就四个大模块,分为圆模块、长度模块、直径模块、角度模块等,依葫芦画瓢我们可以实现下一个模块:

public class ConcreteCircle : Measure
    {
       public override  double  MeasureModule(string name)
       {
     //圆模块算法的具体实现
       }

    }
View Code

然后来创建一个抽象工厂类实现测量类Measure:

public abstract class OperationFactory
    {
      public abstract Measure CreateMeasure();

    }
View Code

接着创建一个具体的工厂类来产生我们需要的模块:例如产生一个圆模块:

public  class ConcreteFactoryCircle:OperationFactory
    {
      //返回一个具体的圆模块单位。
      public Measure CreateMeasure()
      {
          return new ConcreteCircle() ;
      }
    }
View Code

接下来是一个长度模块,简单的继承实现了。

public class ConcreteFactoryLength:OperationFactory
    {
       //产生一个具体的长度模块
       public Measure CreateMeasure()
       {
           return new  ConcreteLength();
       }
    }
View Code

好了,相应的工厂和具体的模块都有了,当选中相应的尺寸检测时,只需创建相应的模块实例就好了,例如产生一个长度模块:

 ConcreteFactoryLength concreteFactoryLength = new ConcreteFactoryLength();
 Measure measure =concreteFactoryLength .CreateMeasure();
View Code

     然后直接调用实例中的测量函数就可以得到相应的尺寸的测量结果。运用这种设计模式使模块之间的关系更加清晰,简单。以后再次开发的时候只需增加一个相应的工厂类和具体测量类就OK了,总体来说这次优化的效果还是不错的,经过测试,同时测量5次的时间比以前工程测量的时间快了3秒左右,不过算法里的优化这一块还没整理,希望在以后的项目实践中能更多的思考,总结,学设计模式主要是运用,光看书虽然有印象但是不运用还是等于白学,所以一定要实践,最好能用自己的思想实现一遍,说不到会有意想不到的效果。


原文地址:https://www.cnblogs.com/master-image/p/3579342.html