1.Container
//利用一个容器来记录测量过的对象
public class Container {
private Object[] objs = new Object[10];
private int size = 0;
private Object max;
private Object min;
private double avg;
private double sum; // 总计算值
private Measurable measurable;
// 初始化测量工具
public void setMeasurable(Measurable measurable) {
this.measurable = measurable;
}
// 核心方法
public void add(Object o) {
if (measurable == null) {
System.out.println("测量工具还没有初始化,系统不能正常运行");
throw new RuntimeException("系统初始化错误");
}
// 数组是否扩容
if (size >= objs.length) {
System.out.println("动态数组当前已满,已自动扩容....");
// 产生新数组,长度是原数组的2倍
Object[] newArray = new Object[objs.length * 2];
// 将原数组的数据复制到新数组中
for (int i = 0; i < objs.length; i++) {
newArray[i] = objs[i];
}
objs = newArray;
}
// 调用测量工具,没出这个o的数值
double value = this.measurable.measure(o);
if (size == 0) {
max = o;
min = o;
} else {
double maxValue = this.measurable.measure(max);
double minValue = this.measurable.measure(min);
if (value > maxValue) {
max = o;
}
if (value < minValue) {
min = o;
}
}
sum += value;
objs[size] = o; // 保存测量过的数据
size++; // 计数器+1
}
public int getSize() {
return size;
}
public Object getMax() {
return max;
}
public Object getMin() {
return min;
}
public double getAvg() {
return this.sum / this.size;
}
public double getSum() {
return sum;
}
public Measurable getMeasurable() {
return measurable;
}
public Object[] getObjs() {
return objs;
}
}