java依赖倒转原则怎么实现
java依赖倒转原则怎么实现
本文小编为大家详细介绍“java依赖倒转原则怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“java依赖倒转原则怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1.什么是依赖倒转原则?
高层模块不应该依赖低层模块,二者都应该依赖其抽象。
抽象不应该依赖细节,细节应该依赖抽象。
依赖倒转 (倒置) 的中心思想是面向接口编程。
依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在Java中,抽象指的是接口或抽象类,细节就是具体的实现类。
使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
2.代码案例
packagecom.szh.principle.inversion;/****/classEmail{publicStringgetInfo(){return"电子邮件信息:hello,world";}}//完成Person接收消息的功能//方式1分析//1.简单,比较容易想到//2.如果我们获取的对象是微信,短信等等,则新增类,同时Person也要增加相应的接收方法//3.解决思路:引入一个抽象的接口IReceiver,表示接收者,这样Person类与接口IReceiver发生依赖//因为Email,WeiXin等等属于接收的范围,他们各自实现IReceiver接口就ok,这样我们就符号依赖倒转原则classPerson{publicvoidreceive(Emailemail){System.out.println(email.getInfo());}}publicclassDependencyInversion{publicstaticvoidmain(String[]args){Personperson=newPerson();person.receive(newEmail());}}
我们可以根据依赖倒转原则对上面的代码做一个改进,如下:
packagecom.szh.principle.inversion.improve;/****///定义接口interfaceIReceiver{publicStringgetInfo();}classEmailimplementsIReceiver{publicStringgetInfo(){return"电子邮件信息:hello,world";}}//增加微信classWeiXinimplementsIReceiver{publicStringgetInfo(){return"微信信息:hello,ok";}}//方式2classPerson{//这里我们是对接口的依赖publicvoidreceive(IReceiverreceiver){System.out.println(receiver.getInfo());}}publicclassDependencyInversion{publicstaticvoidmain(String[]args){//客户端无需改变Personperson=newPerson();person.receive(newEmail());person.receive(newWeiXin());}}
3.依赖关系传递的三种方式和案例举例
3.1 接口传递
packagecom.szh.principle.inversion.improve;/***方式1:通过接口传递实现依赖*/interfaceIOpenAndClose1{publicvoidopen(ITV1tv);//抽象方法,接收接口}interfaceITV1{//ITV接口publicvoidplay();}classOpenAndClose1implementsIOpenAndClose1{@Overridepublicvoidopen(ITV1tv){tv.play();}}classChangHong1implementsITV1{@Overridepublicvoidplay(){System.out.println("长虹电视机,打开");}}publicclassDependencyPass1{publicstaticvoidmain(String[]args){ChangHong1changHong=newChangHong1();OpenAndClose1openAndClose=newOpenAndClose1();openAndClose.open(changHong);}}
3.2 构造方法传递
packagecom.szh.principle.inversion.improve;/***方式2:通过构造方法依赖传递*/interfaceIOpenAndClose2{publicvoidopen();//抽象方法}interfaceITV2{//ITV接口publicvoidplay();}classOpenAndClose2implementsIOpenAndClose2{publicITV2tv;//成员publicOpenAndClose2(ITV2tv){//构造器this.tv=tv;}publicvoidopen(){this.tv.play();}}classChangHong2implementsITV2{publicvoidplay(){System.out.println("长虹电视机,打开");}}publicclassDependencyPass2{publicstaticvoidmain(String[]args){ChangHong2changHong=newChangHong2();//通过构造器进行依赖传递OpenAndClose2openAndClose=newOpenAndClose2(changHong);openAndClose.open();}}
3.3 setter方法传递
packagecom.szh.principle.inversion.improve;/***方式3:通过setter方法传递*/interfaceIOpenAndClose3{publicvoidopen();//抽象方法publicvoidsetTv(ITV3tv);}interfaceITV3{//ITV接口publicvoidplay();}classOpenAndClose3implementsIOpenAndClose3{privateITV3tv;publicvoidsetTv(ITV3tv){this.tv=tv;}publicvoidopen(){this.tv.play();}}classChangHong3implementsITV3{publicvoidplay(){System.out.println("长虹电视机,打开");}}publicclassDependencyPass3{publicstaticvoidmain(String[]args){ChangHong3changHong=newChangHong3();//通过setter方法进行依赖传递OpenAndClose3openAndClose=newOpenAndClose3();openAndClose.setTv(changHong);openAndClose.open();}}
读到这里,这篇“java依赖倒转原则怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。