选择实现—简单工厂
之前写了好多关于排序算法的文章,基本上都是总结性质的,其实排序算法的研究很细致,但是我的博客都基本上只是给出了大体的思路和Java程序实现,算法写起来比较繁琐,感兴趣的话,自己去研究下吧,我推荐算法导论这本书。
看到这么多的排序算法,如果要将其真正用到Java程序里边的话,未免也太复杂了,因为要为每一种算法在使用之前都要先创建一个实例,然后才能使用,这样就暴露了实现,不符合面向对象的基本要求,因此建立一个工厂类,然后让工厂来负责具体的算法的创建,客户端程序员就不必知道具体的算法了,而且,这样做就可以统一接口。
简单工厂的本质是: 封装实现 。
需要注意的是简单工厂的重点在于选择,实现是已经做好了的。简单工厂的目的为在于客户端来选择相应的实现,从而使得客户端和实现之间的解耦。这样一来,具体的实现,就不用变动客户端的代码了,这个变化会被简单工厂吸收和屏蔽。
使用我之前写过的算法的例子,可以这样来应用简单工厂模式。
首先,建立一个具体算法的接口,实现面向接口的编程。接口定义如下:
SortAlgorithm.java
然后,建立每一个算法的具体实现,每一个算法都要实现这个接口。
InsertionSort.java
MergeSort.java
HeapSort.java
QuickSort.java
接下来,建立一个工厂类来为客户端选择具体的算法实现。
SortFactory.java
其中反射用的配置文件如下:
FactoryConfig.properties
当然,还有之前简化的打印类:
Print.java
还有定义算法名称的常量类:
AlgorithmConstants.java
最后,来写一个测试类来测试一下吧!
SortMain.java
输出为:
从这个结果可以看出,所有的算法都能完成排序的工作,而且用了简单工厂模式之后,客户端程序就再也不需要知道具体的排序算法的实现了。
标签: 设计模式
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息