璞玉 发表于 2013-1-6 02:22:13

选择实现—简单工厂

<div id="cnblogs_post_body">  之前写了好多关于排序算法的文章,基本上都是总结性质的,其实排序算法的研究很细致,但是我的博客都基本上只是给出了大体的思路和Java程序实现,算法写起来比较繁琐,感兴趣的话,自己去研究下吧,我推荐算法导论这本书。
  看到这么多的排序算法,如果要将其真正用到Java程序里边的话,未免也太复杂了,因为要为每一种算法在使用之前都要先创建一个实例,然后才能使用,这样就暴露了实现,不符合面向对象的基本要求,因此建立一个工厂类,然后让工厂来负责具体的算法的创建,客户端程序员就不必知道具体的算法了,而且,这样做就可以统一接口。
  简单工厂的本质是:封装实现。
  需要注意的是简单工厂的重点在于选择,实现是已经做好了的。简单工厂的目的为在于客户端来选择相应的实现,从而使得客户端和实现之间的解耦。这样一来,具体的实现,就不用变动客户端的代码了,这个变化会被简单工厂吸收和屏蔽。
  使用我之前写过的算法的例子,可以这样来应用简单工厂模式。
  首先,建立一个具体算法的接口,实现面向接口的编程。接口定义如下:
  
<div class="cnblogs_code" >http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifSortAlgorithm.java<div id="cnblogs_code_open_436956f2-41f8-4f64-af73-719e824d2dcd" class="cnblogs_code_hide"> 1 package com.alfred.sort; 2 3 public interface SortAlgorithm { 4   /** 5    * 将数组按照升序排序 6    * 7    * @param A 8    *            int数组,按升序排列 9      */10   public void sort(int[] A);11 12   /**13    * 将数组按照升序或降序排序14    * 15    * @param A16    *            int数组17    * @param isInc18    *            是否升序,true为升序,false为降序19      */20   public void sort(int[] A, boolean isInc);21 }
页: [1]
查看完整版本: 选择实现—简单工厂