sjms 1.0 框架

接口和抽象类是编制框架的基础。(一些对接口和类的个人理解

框架包括方法框架和流程框架。

方法框架

问题:要求编制求数组最大值的泛型方法
分析:从数组拿到最大值,简化就是从两个对象中比较最大值。

  1. 定义二元比较方法
public interface ILess<T> {
	// x < y ?
    boolean less(T x, T y);
}
  1. 定义数组最大值泛型方法
package com.rrz;

public class MyFramework<T> {

    public T getMax(T[] ts, ILess<T> iLess) {
        // 参数判断
        if (ts == null || ts.length == 0) {
            return null;
        }
        if (iLess == null) {
            return null;
        }

        T maxValue = ts[0];
        for (int i = 1; i < ts.length; i++) {
            if (iLess.less(maxValue, ts[i])) {
                maxValue = ts[i];
            }
        }
        return maxValue;
    }
}

  1. 根本不需要实现 ILess 的子类,上述框架就编译成功。
  2. 框架程序若获得具体应用,则必须实现 ILess 子类。

要使用框架就自己写实现类,自己定义规则

public class IntegerLess implements ILess<Integer>{
    @Override
    public boolean less(Integer x, Integer y) {
        return x < y;
    }
}

或者
先定义一个 model

package com.rrz;

public class Student {
    
    private String name;
    
    private Integer grade;

    public Student(String name, Integer grade) {
        this.name = name;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getGrade() {
        return grade;
    }

    public void setGrade(Integer grade) {
        this.grade = grade;
    }
}

写 ILess 的实现类

package com.rrz;

public class StudentLess implements ILess<Student> {
    @Override
    public boolean less(Student x, Student y) {
        return x.getGrade() < y.getGrade();
    }
}

测试类省略

流程框架

问题:求圆、矩形的面积。要求:求圆面积时能输入圆的半径,求矩形面积时,能输入长、宽。
分析:对不同的形状有不同的输入参数,有不同的求面积方法。“输入”和“求面积”是并列关系。用接口来定义“输入”及“求面积”功能最合适。

public interface IShape {
    
    // 输入
    boolean input();
    
    // 求面积
    float getArea();
}

public class ShapeProc {

    private IShape shape;

    public ShapeProc(IShape shape) {
        this.shape = shape;
    }

    public float process() {
        // 输入
        shape.input();

        // 求面积
        float area = shape.getArea();

        return area;
    }
}

可以发现:

  1. 根本无需实现 IShape 子类,上述流程框架即可编译成功。
  2. 流程框架若获得具体应用,则必须实现 IShape 的子类。

结论:
框架编程原则:面向接口、抽象类进行编程。只要接口和抽象类是稳定的,一般可以抛开具体的实现类进行编程,容易形成一个稳定的框架系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值