zoukankan      html  css  js  c++  java
  • 工厂模式在项目优化中的简单应用

         最近在项目中优化中用到了设计模式中用到工厂设计模式,在此说说自己的看法,看以前师兄写的代码真的不堪入目啊,没一点结构化分模块的意思。整个代码都是从头写到尾,而且代码命名也不规范,从没考虑到优化代码的问题,不是科班出身俺的还是有很多要学习的地方。项目是关于高精度检测方面的。我主要是把算法分成相关模块进行优化。先简单的上个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秒左右,不过算法里的优化这一块还没整理,希望在以后的项目实践中能更多的思考,总结,学设计模式主要是运用,光看书虽然有印象但是不运用还是等于白学,所以一定要实践,最好能用自己的思想实现一遍,说不到会有意想不到的效果。


  • 相关阅读:
    SQLSERVER跨库访问
    Mybatis开发的几个主要事项
    jqGrid参数
    WPF 从当前层次遍历查找 子控件及父控件
    c# 获取图像像素
    异步FIFO的FPGA实现
    note5文档流
    note3css 的padding属性
    note3clip:rect('top', 'right', 'bottom', 'left')是什么意思
    怎样查看端口被占用情况
  • 原文地址:https://www.cnblogs.com/master-image/p/3579342.html
Copyright © 2011-2022 走看看