zoukankan      html  css  js  c++  java
  • 选择实现—简单工厂

    之前写了好多关于排序算法的文章,基本上都是总结性质的,其实排序算法的研究很细致,但是我的博客都基本上只是给出了大体的思路和Java程序实现,算法写起来比较繁琐,感兴趣的话,自己去研究下吧,我推荐算法导论这本书。

      看到这么多的排序算法,如果要将其真正用到Java程序里边的话,未免也太复杂了,因为要为每一种算法在使用之前都要先创建一个实例,然后才能使用,这样就暴露了实现,不符合面向对象的基本要求,因此建立一个工厂类,然后让工厂来负责具体的算法的创建,客户端程序员就不必知道具体的算法了,而且,这样做就可以统一接口。

      简单工厂的本质是:封装实现

      需要注意的是简单工厂的重点在于选择,实现是已经做好了的。简单工厂的目的为在于客户端来选择相应的实现,从而使得客户端和实现之间的解耦。这样一来,具体的实现,就不用变动客户端的代码了,这个变化会被简单工厂吸收和屏蔽。

      使用我之前写过的算法的例子,可以这样来应用简单工厂模式。

      首先,建立一个具体算法的接口,实现面向接口的编程。接口定义如下:

      

    SortAlgorithm.java

      然后,建立每一个算法的具体实现,每一个算法都要实现这个接口。

      

    InsertionSort.java
    MergeSort.java
    HeapSort.java
    QuickSort.java

      接下来,建立一个工厂类来为客户端选择具体的算法实现。

    SortFactory.java

      其中反射用的配置文件如下:

    FactoryConfig.properties

      当然,还有之前简化的打印类:

    Print.java

      还有定义算法名称的常量类:

    AlgorithmConstants.java

      最后,来写一个测试类来测试一下吧!

    SortMain.java

      输出为:

      原始数组:
      23,45,36,78,45,16,59,62,569
      插入排序,升序排列:
      16,23,36,45,45,59,62,78,569
      插入排序,降序排列:
      569,78,62,59,45,45,36,23,16
      合并排序,升序排列:
      16,23,36,45,45,59,62,78,569
      合并排序,降序排列:
      569,78,62,59,45,45,36,23,16
      最大堆排序,升序排列:
      16,23,36,45,45,59,62,78,569
      最小堆排序,降序排列:
      569,78,62,59,45,45,36,23,16
      快速排序,升序排列:
      16,23,36,45,45,59,62,78,569
      快速排序,降序排列:
      569,78,62,59,45,45,36,23,16

      从这个结果可以看出,所有的算法都能完成排序的工作,而且用了简单工厂模式之后,客户端程序就再也不需要知道具体的排序算法的实现了。

     
    标签: 设计模式
  • 相关阅读:
    JMS学习四(ActiveMQ消息过滤)
    JMS学习三(ActiveMQ消息的可靠性)
    JMS学习二(简单的ActiveMQ实例)
    JMS学习一(JMS介绍)
    Linux iostat监测IO状态
    git删除所有提交历史记录
    MySQL查看数据库相关信息
    Java面试通关要点汇总集
    java开发需掌握技能2
    java开发需掌握技能1
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2478604.html
Copyright © 2011-2022 走看看