test文章样式

简易测量系统的开发容器思想是,定义一个measure接口,方便用户对于测量方法的扩展,和一个container用于储存将要测量的对象。基于测量方法和测量对象的不确定,所以在接口中和container类中的方法参数都使用Object父类,易于系统的扩展和更好的满足实用性。

  (一)接口measure代码如下:

//放入com.yc.measuresys的包中

package com.yc.measuresys;


public interface Measure{
public double measure(Object obj);
}


(二)container类:

package com.yc.measuresys;

public class Container {
private Object max;
private Object min;
private double avg;
  private int total;
private int sum;
private Object[] objs=new Object[100];
private Measure measure;

//空构造方法
public Container(){}


//一个参数的构造方法
public Container(Measure measure){
this.measure=measure;
}


//对container类的清空操作
public void clear(){
max=null;
min=null;
avg=0;
total=0;
sum=0;
objs=new Object[100];
measure=null;
}


//重新对measure赋值
public void setMeasure(Measure measure){
this.measure=measure;
}


//加入一个新的数据
public void add(Object obj){
if(obj==null){
System.out.println("测量的对象不能为空");
return;
}
if(this.measure==null){
System.out.println("测量方法不能为空");
return;
}
double value=this.measure.measure(obj);
if(total==0){
max=obj;
min=obj;
}else{
double maxvalue=this.measure.measure(max);
double minvalue=this.measure.measure(min);
if(minvalue>value){
min=obj;
}else if(maxvaluemax=obj;
}
}
objs[total]=obj;
total++;
sum+=value;
avg=sum/total;
}


//当加入的元素个数超过数组的长度时,扩充数组的长度为原来的两倍
public void enlarge(){
if(total>objs.length){
//创建一个新数组,长度为原数组的两倍
Object[] newarray=new Object[objs.length*2];
//库函数System.arraycopy完成数组的复制
System.arraycopy(objs,0,newarray,0,objs.length );
//将新数组的引用地址指向原数组
objs=newarray;
}
}


//获取最大元素
public Object getMax(){
return max;
}


//获取最小元素
public Object getMin(){
return min;
}


//获取平均数
public double getAvg(){
return avg;
}

//获取总的数据个数
public int getTotal(){
return total;
}


//获取所有数据和
public double getSum(){

return sum;
}

//获取数组中的每个元素
public Object[] getObject(){
Object[] newobjs=new Object[objs.length];
System.arraycopy(objs,0,newobjs,0,objs.length);
objs=newobjs;
return objs;
}
}

这样设计系统就能拥有很好的扩展性,通过创建测量对象和测量方法,可以重复使用这个系统,比如,在下面的测试中,写了两个测量人体bmi指数的类:

(一)Person类:

//这个类放在com.tencent.bean中

package com.tencent.bean;

public class Person{
private String name;
private int weight;
private double height;

//空的构造方法
public Person(){}

//三个参数的构造方法
public Person(String name,int weight,double height){
this.name=name;
this.weight=weight;
this.height=height;
}

//获取weight属性的方法
public int getWeight(){
return this.weight;
}

//获取height属性的方法
public double getHeight(){
return this.height;
}

//获取Person属性信息的方法
public String getInfo(){
return "名字:"+this.name+"\t体重:"+this.weight+"\t身高"+this.height;
}
}

(二)Bmimeasure类

package com.tencent.bean;

import com.yc.measuresys.Measure;
import com.tencent.bean.Person;

public class Bmimeasure implements Measure{
public double measure(Object obj){
if(obj==null){
System.out.println("测量对象不能为空");
}
if(!(obj instanceof Person)){
System.out.println("传入的对象必须是人");
}
Person p=(Person)obj;
int weight=p.getWeight();
double height=p.getHeight();
return weight*weight/height;
}
}

通过Test.java文件进行测试:

//导入外部的包

import com.yc.measuresys.Measure;
import com.yc.measuresys.Container;


import com.tencent.bean.Person;
import com.tencent.bean.Bmimeasure;


public class Test{
public static void main(String[] args){
//直接调用节省了3个变量名空间
Measure measure=new Bmimeasure();
Container con=new Container(measure);


con.add(new Person("smith",60,170));
con.add(new Person("Tom",80,180));
con.add(new Person("Jack",90,150));

Person maxPerson=(Person)con.getMax();
Person minPerson=(Person)con.getMin();
System.out.println(maxPerson.getInfo() );
System.out.println(minPerson.getInfo() );
}
}

可以得到bmi最大和最小的人,以及平均bmi指数、传入的总人数、总bmi指数、传入的每个人的数据信息,以后如果再要用到这个系统时,只需要重写measure方法和创建一个数据类即可。

你可能感兴趣的:(test文章样式)