• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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[];
  }

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

32/3<123>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网