java中接口的编程理解
2017-06-01 10:39
246 查看
转载至:http://www.cnblogs.com/LearningC/p/3629140.html
针对接口编程。简简单单的六个字。说起来简单,想要做到这一步,需要花点时间和精力。
下面,我讲通过自己做过的项目和经验来谈谈我的理解。如果有理解不对的地方,还请各位指正。
情景:
现在,有一个门禁需要驱动(这里的驱动指的是控制)。第一步:必须先建立连接;第二部:发送传输命令,让门磁打开,或是关闭。第三步:关闭连接。
说到这里,我想起了我自己的开发经历。相当长的一段时间,我会这样做。(如下)
调用:
后来,硬件工程师告诉我,设备升级了,他们不仅可以通过网络来传送命令。也可以通过COM口来传送命令,领导还说,这个必须和旧的设备兼容,需求的变动,永远是我们头疼的也是必须解决的问题。于是,我们这样改变。
我们需要该变原来的类,因为需要兼容原来的设备。当然,调用的地方也需要做相应的修改。因为我们需要区别到底是新设备还是旧设备。
我们发现,仅仅修改了一个设备的通讯方式,我们需要做出的改变是巨大的。如果我们针对接口编程,这里涉及到、单一职责原则、里氏替换原则、依赖倒置原则。
这里,我会将门禁的连接、断开封装在一个接口中。将发送命令封装在另外一个接口中。
这里是连接接口:
这里是通讯接口:
这里是我们的门禁接口:
这里是门禁的实现:
我们发现和最开始写的没什么不一样,但是,我们继续看下面的调用。
发现,我们定义了一个IDoor 而不是Door ,我们却用的Door来实现。如果这个时候硬件工程师告诉我们。通讯方式变了。这个时候。我们只需要添加一个新的类叫NewDoor
这个时候,我们调用的时候,只需要确定是新设备的时候,用NewDoor来实例化。而不是Door。
我们发现改动量小了很多,而且结构清晰,便于维护。项目组里面如果有人员变动,如果文档比较清晰的话,这些都是很好上手的。
针对面向实接口实现编程:
interface Tire {publicvoid roll();
} class Bridgestone implements Tire {publicvoid roll()
{ System.out.print("Bridgestone is rolling."); } } class Michelin implements Tire {publicvoid roll()
{ System.out.print("Michelin is rolling"); } }
接口Tire定义了“转动”这个接口,但把实现延迟到了子类中
classCar {
public void roll(Tire tire) {
tire.roll();
}
}
Car car = new Car();
BridgeStone tire1 = new Bridgestone();
Michelin tire2 = new Mechilin();
car.roll(tire1);
car.roll(tire2);
针对接口编程。简简单单的六个字。说起来简单,想要做到这一步,需要花点时间和精力。
下面,我讲通过自己做过的项目和经验来谈谈我的理解。如果有理解不对的地方,还请各位指正。
情景:
现在,有一个门禁需要驱动(这里的驱动指的是控制)。第一步:必须先建立连接;第二部:发送传输命令,让门磁打开,或是关闭。第三步:关闭连接。
说到这里,我想起了我自己的开发经历。相当长的一段时间,我会这样做。(如下)
我们发现,仅仅修改了一个设备的通讯方式,我们需要做出的改变是巨大的。如果我们针对接口编程,这里涉及到、单一职责原则、里氏替换原则、依赖倒置原则。
这里,我会将门禁的连接、断开封装在一个接口中。将发送命令封装在另外一个接口中。
这里是连接接口:
针对面向实接口实现编程:
interface Tire {publicvoid roll();
} class Bridgestone implements Tire {publicvoid roll()
{ System.out.print("Bridgestone is rolling."); } } class Michelin implements Tire {publicvoid roll()
{ System.out.print("Michelin is rolling"); } }
接口Tire定义了“转动”这个接口,但把实现延迟到了子类中
classCar {
public void roll(Tire tire) {
tire.roll();
}
}
Car car = new Car();
BridgeStone tire1 = new Bridgestone();
Michelin tire2 = new Mechilin();
car.roll(tire1);
car.roll(tire2);
相关文章推荐
- 简单理解遵循接口隔离原则的Java设计模式编程
- Java游戏编程---人机交互和用户接口
- Java下XML编程接口比较
- 理解Java面向对象的程序设计思想-Java基础-Java-编程开发
- 关于java的接口回调和向上转型的理解
- Java入门--接口与抽象类的深层理解
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- 深刻理解Java编程的7个例子
- Java初学者都必须理解的六大问题-Java基础-Java-编程开发
- 全面理解Java中的String数据类型-Java基础-Java-编程开发
- 深刻理解Java编程的7个例子
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- 面向接口编程理解(转摘)
- 说说对java中接口的理解
- 用Javap反编译帮你理解Java特性-Java基础-Java-编程开发
- 对java 接口和实现的理解
- java编程思想3感悟(5)---复用具体实现和复用接口
- 理解java中的两种接口
- JAVA中的接口和抽象类(加深初学者理解)
- 深刻理解Java编程的7个例子