• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Java設計模式之修飾模式篇(4)

    發布: 2008-6-04 14:40 | 作者: 不詳 | 來源: code365 | 查看: 46次 | 進入軟件測試論壇討論

    領測軟件測試網


       // getRealModel方法被子類用來引用真實對象。
      protected TableModel getRealModel() {
       return realModel;
      }
      private TableModel realModel; // 真實對象
      }

        注意到TableModelDecorator的構造函數僅僅實現了傳遞方法調用的功能。

      // TableSortDecorator.java
      import javax.swing.table.TableModel;
      public abstract class TableSortDecorator extends
      TableModelDecorator {
      // 實現TableSortDecorator接口的類必須實現sort()方法。除此之外,
      // 還需要實現TableModelDecorator中的tableChanged()方法。
      abstract public void sort(int column);
      public TableSortDecorator(TableModel realModel) {
      super(realModel);
      }
      }
      // TableBubbleSortDecorator.java
      import javax.swing.table.TableModel;
      import javax.swing.event.TableModelEvent;
      public class TableBubbleSortDecorator extends TableSortDecorator {
      // 該類的構造函數需要一個TableModel的實例作為參數。
      // 該類為表模型增加了排序功能。
      public TableBubbleSortDecorator(TableModel model) {
      super(model);
      allocate();
      }
      // tableChanged()方法是被定義在TableModelListener接口中的。
      // TableModelDecorator繼承了TableModelListener接口。
      public void tableChanged(TableModelEvent e) {
      allocate();
      }
      // 兩個TableModel中的方法被重載。
      public Object getValueAt(int row, int column) {
      return getRealModel().getValueAt(indexes[row], column);
      }
      public void setValueAt(Object aValue, int row, int column) {
      getRealModel().setValueAt(aValue, indexes[row], column);
      }
      // 簡單的冒泡排序
      public void sort(int column) {
      int rowCount = getRowCount();
      for(int i=0; i < rowCount; i++) {
      for(int j = i+1; j < rowCount; j++) {
      if(compare(indexes[i], indexes[j], column) < 0) {
      swap(i,j);
      }
      }
      }
      }
      private void swap(int i, int j) {
      int tmp = indexes[i];
      indexes[i] = indexes[j];
      indexes[j] = tmp;
      }
      private int compare(int i, int j, int column) {
      TableModel realModel = getRealModel();
      Object io = realModel.getValueAt(i,column);
      Object jo = realModel.getValueAt(j,column);
      int c = jo.toString().compareTo(io.toString());
      return (c < 0) ? -1 : ((c > 0) ? 1 : 0);
      }
      private void allocate() {
      indexes = new int[getRowCount()];
      for(int i=0; i < indexes.length; ++i) {
      indexes[i] = i;
      }
      }
      private int indexes[];
      }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    32/3<123>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>