新人浅谈实际开发中对于java接口的认知

来源:互联网 发布:一个网站几个域名 编辑:程序博客网 时间:2024/06/05 15:04

说说本人对接口的认知——1.定义开发的规范标准,2.延续代码后期的维护性和扩展性。

1.先说自身对规范标准的认知,我在部门的某次项目开发中,某块业务经过小组讨论分析完后,由我担任组长的位置,我的首要开发任务是将我们探讨完毕的业务进行一个后台功能点的整理,定出一个我们开发的后台接口文档,然后根据接口文档,统一规范的建一个本次业务的接口类,在类中我将所有的功能都定义好了抽象方法,然后再分工下去组员实现。这样做有几点好处:1:取名规范性,杜绝了组员按照自己的风格取类名和方法名。2:提高了开发人员对代码的查找和定位效率(如果不用接口,只是把功能直接分给组员去实现,大家建类建方法各自为营)。3:不会出现哪一个方法没有实现(杜绝组员忘记实现功能点或者偷懒取巧越过功能点)。

2.关于维护性和扩展性,举如下例子说明:
模拟一个实际开发中的代码场景,有一个BusinessService普通类,其中定义了一个query()方法,本方法提供某查询业务;有一个客户端类的三个业务方法中都用到了BusinessService的query()方法。
编写代码:

public class BusinessService {    public void query(){        System.out.println("执行查询业务");    }    public void newQuery(){        System.out.println("执行新的查询业务");    }}public class testClient {    BusinessService bs = new BusinessService();    public static void main(String[] args) {        testClient tc = new testClient();        tc.getString1();        tc.getString2();        tc.getString3();    }    public void getString1(){        bs.query();    }    public void getString2(){        bs.query();    }    public void getString3(){        bs.query();    }}

以上代码从功能角度来讲没有任何问题,如果某一天,业务部门对需求进行了变更,导致query()方法必须要修改,那么针对如上的代码,开发人员采取两种方案,1:对原有的query()方法直接进行修改(没有谁这么干),2:重新编写一个newQuery()方法来满足新需求。那么这样做了之后上面的testClient类中的三个业务方法也要随之对方法的调用进行修改,将原本的bs.query();改成bs.newQuery()。如下:

public void getString1(){//      bs.query();        bs.newQuery();    }    public void getString2(){//      bs.query();        bs.newQuery();    }    public void getString3(){//      bs.query();        bs.newQuery();    }

试想,实际开发中,testClient类中可能有几十个业务方法中进行了bs.query()的调用,这样就体现出了代码的维护性和扩展性比较差了。

现在对原业务换成使用接口的代码场景。

//定义BusinessService接口:public interface BusinessService {    public void query();}//BusinessServiceImpl实现接口:public class BusinessServiceImpl implements BusinessService{    public void query() {        // TODO Auto-generated method stub        System.out.println("执行查询业务");    }}

//如一开始一样,testClient2客户类中三处业务方法中使用query()方法:

public class testClient2 {    BusinessService bs = new BusinessServiceImpl();    public static void main(String[] args) {        testClient tc = new testClient();        tc.getString1();        tc.getString2();        tc.getString3();    }    public void getString1(){        bs.query();    }    public void getString2(){        bs.query();    }    public void getString3(){        bs.query();    }}

同样某一天,业务部门对需求进行了变更,导致query()方法必须要修改,那么针对如上情况,我们采取建立NewBusinessServiceImpl类,在本类中重新定义query()方法,NewBusinessServiceImpl实现接口。

public class NewBusinessServiceImpl implements BusinessService{    public void query() {        // TODO Auto-generated method stub        System.out.println("执行新的查询业务");    }}

而在testClient2客户类中,只需要修改一行代码,将BusinessService bs = new BusinessServiceImpl();换成BusinessService bs = new NewBusinessServiceImpl();,客户类中有再多的业务方法调用query()方法,我们也只需要修改一行代码,就解决了业务变更问题,从维护和扩展性角度来看,非常值得。

总结:工作时间一年半,仅对领悟出来的经验进行一个整理和分享,如有不对的地方烦请看到的大神可以指正。。。。

0 0
原创粉丝点击