JAVA中开闭原则-----对扩展开放, 对修改关闭。以及接口隔离原则的强大
来源:互联网 发布:2017seo内容编辑软件 编辑:程序博客网 时间:2024/05/22 10:35
这里用一个测量工具类来体现这个原则,此测量工具类可以对任何事物进行测量,只要对象提供测量的原则,由此这个系统可以被无限扩大,而核心代码被封装,系统完全按照一个类似框架的结构区扩大,需要测量的对象只要实现测量接口,并实现compareTo()这个方法,就可以在DataSet类中进行数据的测量和获取
DataSet中的add方法将要测量的对象存入一个可变数组中,由这个方法实现各个数据的数据采集
public interface Measurable{public double measure(Object obj);}//这个是过滤接口,实现数据的过滤public interface Filter{public boolean accept(Object obj);}
DataSet中的add方法将要测量的对象存入一个可变数组中,由这个方法实现各个数据的数据采集
public class DataSet{private Object max;//测量的数据的最大值private Object min;//测量的数据的最大值private double avg;//平均值private double sum;private int count;private Measurable measurable;//测量工具private Filter filter;//过滤工具private Object[] objects;//数组存数据public DataSet(){this.objects=new Object[2];}//重置数据集public void reset(){max=null;min=null;sum=0;count=0;measurable=null;filter=null;}//添加要测量的对象;public void add(Object obj){if(this.measurable==null){return;}//TODO:增加一个过滤器的判断规则在这里if(filter!=null&&filter.accept(obj)==false){return;}//TODO:判断数组是否已经满了,如果满了,则扩大数组的长度(*2)//将原数组的值复制到新的数组中。if(count>=objects.length){Object[] object1=new Object[2*(objects.length)];System.arraycopy(objects,0,object1,0,objects.length); objects=object1;//指向object1的引用变成垃圾System.gc();//garbadge collect }//测量新对象的值double result=this.measurable.measure(obj);if(count==0){max=obj;min=obj;}else{double maxresult=this.measurable.measure(max);double minresult=this.measurable.measure(min);if(result>maxresult){this.max=obj;}if(result<minresult){this.min=obj;}}objects[count]=obj;count++;sum+=result;avg=sum/count;}//数组的排序方法;public void sort(Comparable comparable){if(comparable==null){return ;}for(int i=1;i<count;i++){Object next=objects[i];int j=i;while(j>0&&comparable.compareTo(objects[j-1],next)>0){objects[j]=objects[j-1];j--;}objects[j]=next;}}//得到数组中的数据集public Object[] getObjects(){Object[] result=new Object[count];System.arraycopy(objects,0,result,0,count);return result;}public void setMeasurable(Measurable measurable){this.measurable=measurable;}public void setFilter(Filter filter){this.filter=filter;}public Object getMax(){return this.max;}public Object getMin(){return this.min;}public double getAvg(){return this.avg;}public double getSum(){return this.sum;}}下面做个例子来用一下这个测量工具类,
//测量对象public class Person{private String name;private double height;private double weight;public Person(){}public Person(String name,double height,double weight){this.name = name;this.height=height;this.weight=weight;}public String getName(){return name;}public double getHeight(){return height;}public double getWeight(){return weight;}public String toString(){return "姓名:"+name+"\t身高:"+height+"\t体重:"+weight;}}//要用工具测量的person类提供的测量方法,public class PersonBmiMeasure implements Measurable,Filter,Comparable{public double measure(Object obj){if(obj==null){System.out.println("输入的对象不能润为空!");return 0;}if( !(obj instanceof Person) ){return 0;}Person p=(Person)obj;return (p.getWeight()/(p.getHeight()*p.getHeight()));}public boolean accept(Object object){if(obj==null){System.out.println("输入的对象不能润为空!");return false;}if( !(obj instanceof Person) ){return false;}Person p=(Person)obj;if(obj.getWeight()<=0||obj.getHight()<=0){return false;}return true;}public double compareTo(Object obj1,Object obj2){if(obj1==null||obj2=null){System.out.println("输入的对象不能润为空!");return 0;}if( !(obj1 instanceof Person) || !(obj2 instanceof Person) ){return 0;}Person p1=(Person)obj1;Person p2=(Person)obj2;return p1.getHight()-p2.getHight();}}
由上可知,再加一个将同类型对象按一定规则输出的coparable接口,就可以实现同类型的对象的排序
而核心代码DataSet类不会因为测量的对象发生变化,这个系统可以变得很灵活,并且测量的对象所用的代码格式也很有规律,极大提高了编程效率。。。作为接触JAVA技术的我来说,这段代码让我更加爱上编程,也体会到了面向对象语言的强大!
0 0
- JAVA中开闭原则-----对扩展开放, 对修改关闭。以及接口隔离原则的强大
- 对接口隔离原则的理解
- 开放封闭原则和接口隔离原则
- 修改封闭、扩展开放原则
- 浅谈Java的开放关闭设计原则
- Java六大设计原则-接口隔离原则
- 开放接口、隐藏细节——由模式谈面向对象的基本原则之开闭原则
- 开放接口、隐藏细节——由模式谈面向对象的基本原则之开闭原则
- 开放接口、隐藏细节——由模式谈面向对象的基本原则之开闭原则
- 开放接口、隐藏细节——由模式谈面向对象的基本原则之开闭原则
- 开放接口、隐藏细节——由模式谈面向对象的基本原则之开闭原则
- 接口隔离原则的定义
- java设计原则---开闭原则
- 设计原则-开放关闭原则
- java开闭原则
- Java开闭原则
- java开闭原则实例
- 设计原则-接口隔离原则
- hdu-1282-回文数猜想( 存int类型操作 )
- Hash Table 开放寻址处理冲突
- OpenWRT定时关闭WIFI
- JAVA - 类和对象
- re---Python的正则表达式模块
- JAVA中开闭原则-----对扩展开放, 对修改关闭。以及接口隔离原则的强大
- 技术的未来,迷茫和选择
- 内核空间和用户空间
- 浏览器下载文件时一共发送2次请求,如何把“下载次数”只记录为1次?
- 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明
- 利用wampsever自定义网站根目录
- Android :task 与 back stack解读之初步了解.(包括 task,back stack,lauchMode, taskAffinity ,intent flags等解析)
- 堆排序
- DedeCms 万能安全防护代码