<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 不兼容結構的協調——適配器模式(二) 9.3 完整解決方案 Sunny軟件公司開發人員決定使用適配器模式來重用算法庫中的算法,其基本結構如圖9-4所示: ![](http://img.my.csdn.net/uploads/201303/01/1362069067_3033.jpg) 圖9-4 算法庫重用結構圖 在圖9-4中,ScoreOperation接口充當抽象目標,QuickSort和BinarySearch類充當適配者,OperationAdapter充當適配器。完整代碼如下所示: ``` //抽象成績操作類:目標接口 interface ScoreOperation { public int[] sort(int array[]); //成績排序 public int search(int array[],int key); //成績查找 } //快速排序類:適配者 class QuickSort { public int[] quickSort(int array[]) { sort(array,0,array.length-1); return array; } public void sort(int array[],int p, int r) { int q=0; if(p<r) { q=partition(array,p,r); sort(array,p,q-1); sort(array,q+1,r); } } public int partition(int[] a, int p, int r) { int x=a[r]; int j=p-1; for (int i=p;i<=r-1;i++) { if (a[i]<=x) { j++; swap(a,j,i); } } swap(a,j+1,r); return j+1; } public void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } } //二分查找類:適配者 class BinarySearch { public int binarySearch(int array[],int key) { int low = 0; int high = array.length -1; while(low <= high) { int mid = (low + high) / 2; int midVal = array[mid]; if(midVal < key) { low = mid +1; } else if (midVal > key) { high = mid -1; } else { return 1; //找到元素返回1 } } return -1; //未找到元素返回-1 } } //操作適配器:適配器 class OperationAdapter implements ScoreOperation { private QuickSort sortObj; //定義適配者QuickSort對象 private BinarySearch searchObj; //定義適配者BinarySearch對象 public OperationAdapter() { sortObj = new QuickSort(); searchObj = new BinarySearch(); } public int[] sort(int array[]) { return sortObj.quickSort(array); //調用適配者類QuickSort的排序方法 } public int search(int array[],int key) { return searchObj.binarySearch(array,key); //調用適配者類BinarySearch的查找方法 } } ``` 為了讓系統具備良好的靈活性和可擴展性,我們引入了工具類XMLUtil和配置文件,其中,XMLUtil 類的代碼如下所示: ``` import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; import java.io.*; class XMLUtil { //該方法用于從XML配置文件中提取具體類類名,并返回一個實例對象 public static Object getBean() { try { //創建文檔對象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File("config.xml")); //獲取包含類名的文本節點 NodeList nl = doc.getElementsByTagName("className"); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); //通過類名生成實例對象并將其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; } catch(Exception e) { e.printStackTrace(); return null; } } } ``` 配置文件config.xml中存儲了適配器類的類名,代碼如下所示: ``` <?xml version="1.0"?> <config> <className>OperationAdapter</className> </config> ``` 編寫如下客戶端測試代碼: ``` class Client { public static void main(String args[]) { ScoreOperation operation; //針對抽象目標接口編程 operation = (ScoreOperation)XMLUtil.getBean(); //讀取配置文件,反射生成對象 int scores[] = {84,76,50,69,90,91,88,96}; //定義成績數組 int result[]; int score; System.out.println("成績排序結果:"); result = operation.sort(scores); //遍歷輸出成績 for(int i : scores) { System.out.print(i + ","); } System.out.println(); System.out.println("查找成績90:"); score = operation.search(result,90); if (score != -1) { System.out.println("找到成績90。"); } else { System.out.println("沒有找到成績90。"); } System.out.println("查找成績92:"); score = operation.search(result,92); if (score != -1) { System.out.println("找到成績92。"); } else { System.out.println("沒有找到成績92。"); } } } ``` 編譯并運行程序,輸出結果如下: ``` 成績排序結果: 50,69,76,84,88,90,91,96, 查找成績90: 找到成績90。 查找成績92: 沒有找到成績92。 ``` 在本實例中使用了對象適配器模式,同時引入了配置文件,將適配器類的類名存儲在配置文件中。如果需要使用其他排序算法類和查找算法類,可以增加一個新的適配器類,使用新的適配器來適配新的算法,原有代碼無須修改。通過引入配置文件和反射機制,可以在不修改客戶端代碼的情況下使用新的適配器,無須修改源代碼,符合“開閉原則”。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看