【实验2:框架设计者 IoC】

通过编写排序的测试框架,理解什么是框架、框架与库函数的区别(IoC)以及什么是针对接口编程、说明DIP的错误
摘要由CSDN通过智能技术生成

实验1中的BinaryOP在于使读者知道回调机制如何实现,在它面临术语IoC时,将它称为框架似乎缺乏说服力,因为它缺乏一个控制模块。本节通过另外一个例子给出框架设计的更多思考和讨论。

【最后编辑2022.2】返回目录

【实验2:框架设计者】

  • 实验目的:通过编写排序的测试框架,理解什么是框架、框架与库函数的区别(IoC)以及什么是针对接口编程,认识依赖倒置原则DIP的基本错误。
  • 实验内容:重构冒泡排序chap1.temp.BubbleSort,在此基础上编写(或者说获得)对任意排序算法进行测试的框架。

1.2.1起点

先给出实验2的最简单粗暴的chap1.temp.BubbleSort代码,它完成冒泡排序并在本类中进行测试。temp(临时)这个包名,意味着BubbleSort的结构,有许多值得改进的地方。

package chap1.temp;//将被重构 –移动
public class BubbleSort  {
    public int[] sort(int[] arr){//本书通常不关注算法!
        for(int i = 0 ; i< arr.length-1; i++){
            for(int j = 0 ; j < arr.length-i-1;j++){
                if(arr[j] > arr[j+1]){ //冒泡
                    swap(arr ,j, j+1);
                }
            }
        }
        return arr;
    }
    
    //移到父类型中
    public static void swap(int[] arr ,int one, int two){
        if(one == two){return;}
        int temp = arr[one];
        arr[one] = arr[two];
        arr[two] = temp;
    }

    //移到SortTest中
    public static void  simpTest(int[] array) {        
        array = new BubbleSort().sort(array);
        pln(array);
    }
    public static void pln(int[] array) {
        System.out.println(java.util.Arrays.toString(array));
    }

    public static void main(String[] args){//BlueJ中可以省略本方法。
        simpTest(new int[]{5, 8, 5, 4, 3, 5, 2, 7, 5, 9});
    }  
}

大体上说,本实验一共包括五个步骤的变化,下面的→表示使用关系,<=表示继承关系。

  1. SortTest→BubbleSort。代码职责分离;但是客户SortTest依赖具体的服务BubbleSort,这是不好的设计。
  2. SortTest→IntSort<=BubbleSort。应用程序SortTest遵循针对接口编程/依赖抽象类型原则,它依赖抽象类型IntSort,而BubbleSort自然地依赖抽象的父类型。
  3. 【SortTest→In
  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值