package packageExercise;
/* 因为方法的多态,所以接口的调用者只需要调用接口,
* 具体的业务交给接口的实现者去实现
* 即使用接口,可以避免接口调用方直接参与业务逻辑实现,
* 所以能避免接口调用与业务逻辑实现紧密关联,即解耦
*
* 从下面的 setDisk(Disk disk)方法中,
* 我们传递的不是某个具体的对象,
* 而是一个抽象的“闹钟功能”的概念,
* 至于实际上传递的是什么参数,
* 要看具体情况(取决于我让哪种设备"have a"存储功能)。
* 实际上,我们只关心“具有存储功能”这件事,
* 我们不关心它是由谁实现的和怎样实现的,
* 这就做到了“请求”和“实现”分离开来,
* 这就是接口的解耦!!!
*
*
* */
public class Demo2 {
public static void main(String[] args){
UDisk uDisk = new UDisk();
DownloadTool downloadTool = new DownloadTool();
downloadTool.setDisk(uDisk);
downloadTool.downLoad(11);
CDDisk cdDisk = new CDDisk();
downloadTool.setDiskCD(cdDisk);//此CD没有实现Disk接口,所以不适用于setDisk方法,需另建方法,
downloadTool.downloadCD(111);
CDDisk2 cdDisk2 = new CDDisk2();
downloadTool.setDisk(cdDisk2);
downloadTool.downLoad(1111);
System.out.println(uDisk instanceof Disk);
}
}
//定义一个接口:磁盘,有存储数据的功能
interface Disk{
void save(int message);
}
//U盘和硬盘都装有磁盘,都有存储功能。都可以实现这个接口
class UDisk implements Disk{
public void save(int message) {
System.out.println("U盘通过U盘的方式存储了数据Message:" + message);
}
}
class HardDisk implements Disk{
public void save(int message) {
System.out.println("硬盘通过硬盘的方式存储了数据Message" + message);
}
}
class DownloadTool{
Disk disk;
CDDisk cdDisk;
void setDisk(Disk disk){
this.disk = disk;
}
void downLoad(int message){
this.disk.save(message);
}
void setDiskCD(CDDisk cdDisk){
this.cdDisk = cdDisk;
}
void downloadCD(int message){
this.cdDisk.save(message);
}
}
class CDDisk{
public void save(int message){
System.out.println("CD通过CD的方式存储了数据Message:" + message);
}
}
class CDDisk2 implements Disk{
public void save(int message) {
System.out.println("CD通过CD的方式存储了数据Message:" + message);
}
}
最近对接口有了深一点的理解,以及什么是解耦
最新推荐文章于 2023-07-15 07:13:04 发布