版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37606901/article/details/82530512
简单的介绍一下适配器:
在进行适配器之前我们先来一个不采用适配器简单的例子:
接口:
厨师的接口:
package com.bjpowernode.worker;
public interface ICooker {
String cook();
}
程序员的接口:
package com.bjpowernode.worker;
public interface IProgrammer {
String program();
}
厨师的实现类:
package com.bjpowernode.worker.impl;
import com.bjpowernode.worker.ICooker;
public class QjdCooker implements ICooker {
@Override
public String cook() {
return "烤制美味烤鸭";
}
}
工程师的实现类:
package com.bjpowernode.worker.impl;
import com.bjpowernode.worker.IProgrammer;
public class JdProgrammer implements IProgrammer {
@Override
public String program() {
return "编写高效程序";
}
}
测试类:由程序可知程序里面就有了两种工种,所以就要new 两次对象,但是如果我是100个工种呢,难道也要进行new 100次嘛?
package com.bjpowernode.test;
import com.bjpowernode.worker.ICooker;
import com.bjpowernode.worker.IProgrammer;
import com.bjpowernode.worker.impl.JdProgrammer;
import com.bjpowernode.worker.impl.QjdCooker;
public class MyTest {
public static void main(String[] args) {
ICooker qjdCooker = new QjdCooker();
IProgrammer jdProgrammer = new JdProgrammer();
System.out.println(qjdCooker.cook());
System.out.println(jdProgrammer.program());
}
}
以上的这个代码因为没有使用适配器,所以就很麻烦。
(1)适配器:让一个接口转换成另一个接口,比如说家用电器是220V,但是呢我的手机充电器、电脑等等他们的使用电压都不是220V.所以我就会他们提供一个统一管理方式
(2)以上代码因为创建了两个对象,所以就是很麻烦的,所以我想要进行统一的管理,所谓的统一管理就是提供遍历。
所以我们由上面就可以知道了使用适配器的好处。
所以现在我就要定义一个适配器的接口:
package com.myproject.adapters;
public interface IWorkerAdapter {
String work(Object worker);// 因为我不管你是哪一个,总之你就是worker,而且是object 类型
}
再者,适配器的实现类:
package com.myproject.worker.impl;
import com.myproject.adapters.IWorkerAdapter;
import com.myproject.worker.ICooker;
import com.myproject.worker.IProgrammer;
public class WorkerAdapter implements IWorkerAdapter {
/*定义适配器
*
* ***/
public String work(Object worker) {
// 因为下面的两个if中需要用到返回值对象。
String workContent = " ";
// 先对worker传过来的雷子那个进行判断,虽然什么对象都可以传过来,但是因为不同的对象调用不同的方法
// 如果传过来的对象是厨师,那么我就调用cook()方法
if (worker instanceof ICooker) {
workContent =((ICooker) worker).cook();//如果不赋值给workContent的话,那么它将无法进行输出。
}//为了提高效率,我用if---else进行连接
else if (worker instanceof IProgrammer) {
workContent=((IProgrammer) worker).programmer();
}
return workContent;// 返回上面定义的返回值对象
}
}
其余的代码(厨师、程序员的接口以及接口的具体实现类都是和上面的一样),测试类如下:
package com.myproject.test;
import com.myproject.adapters.IWorkerAdapter;
import com.myproject.worker.ICooker;
import com.myproject.worker.IProgrammer;
import com.myproject.worker.impl.JdProgrammer;
import com.myproject.worker.impl.QjdCooker;
import com.myproject.worker.impl.WorkerAdapter;
public class MyTest {
public static void main(String[] args) {
ICooker qjdCooker=new QjdCooker();
IProgrammer jdProgrammer=new JdProgrammer();
//小技巧:选中qjdCooker.cook();alt+?
//因为要统一管理就需要用到适配器、也就是在这里需要的是进行遍历,既然是遍历那么就一定要有数组,所以我在这里就定义object 数组。
//静态数组,直接赋值,把两个对象传过来。
Object[] workers={qjdCooker,jdProgrammer};
//在遍历之前,因为我要把遍历获得的对象放入适配器里面,但是前提我得首先创建一个适配器。
IWorkerAdapter adapter =new WorkerAdapter();
//循环遍历每个工种对象、让每个工种对象在适配器中逐个进行匹配
for(Object worker:workers){
String workContent=adapter.work(worker);
System.out.println(workContent);
}
}
}
我们再来进行修改,一个适配器还可以扩展很多分支,所以在这里我演示为每一个工种都创建单独的一个适配器。修改IWorkerAdapter: