JAVA 适配传入的类值不同 java中适配器模式的理解_Source


适配器模式就是将某个类的接口转换为客户需要的那种接口,让因接口不匹配的类可以一起工作。也就是我们所说的兼容

类适配器:

画图理解


JAVA 适配传入的类值不同 java中适配器模式的理解_System_02


如果没有这个适配器那么手机是不能直接使用的220v的电压的,所以我们就需要这个适配器的。

那我们的电源适配器是怎么工作,或者说它在我们的Java代码中是怎么实现的呢?

画图理解


JAVA 适配传入的类值不同 java中适配器模式的理解_java适配器模式_03


我们的思路就是这么的简单,实现目标接口,就已有继承的属性进行转换:

代码演示:

//创建一个目标接口
interface target{
intout5();
//目标输出
}
//创建一个现有220V电压的Source类
classSource{
int src =220;
public intout 220(){ 
System.out.println("现有电压:"+src);
return src;}
}
//创建一个适配器类:
class Adapter extends Sourceimplementstarget{
publicintout5(){
//接收现有的220V电压int s =out220();
//将得到的220电压转换为5v的电压
int s2 = s/44;
return s2;
//将此时的5V电压返回。达到将220--> 5
}
}
//创建一个手机类
classPhone{
//定义一个手机充电的方法
publicvoidchong(target s){
if(s.out5()==5){ 
System.out.println("电压转换为5伏可以进行充电");
}else{ 
System.out.println("电压转换失败,不能进行充电");
}
}
}
//搞一个测试类来进行测试
publicclassTest{publicstaticvoidmain(String[] args){ 
Phone p =new Phone(); 
 p.chong(newAdapter());
}
}

//输出结果:

//现有电压220V

//电压转换为5可以进行充电

我哭了,CSND的代码在这上边是真的不好看!还不好弄,凑活看吧

对象适配器:

上边的适配器通过继承来获取现有的被适配器的属性,而类适配器与之非常的相似。只是我们不是继承了被适配器,而是创建被适配器对象,通过该对象来获取被适配器的属性

来张图:


JAVA 适配传入的类值不同 java中适配器模式的理解_抽象类_04


代码演示:其中的绝大多数代码不需要改动,所以在类适配器的基础上修改

//创建一个目标接口
interface target{
 int out5(); //目标输出
 }
//创建一个现有220V电压的Source类
class Source{
 int src = 220;
 public int out220(){
 System.out.println("现有电压:"+src);
 return src;
 }
}
//创建一个适配器类:
//此时的适配器没有继承被适配器
class Adapter implements target{
 //创建一个被适配器对象
 private Source source;
 //通过构造方法来进行创建对象
 public Adapter(Source source){
 this.source = source;
}
 public int out5(){
 //先判断一下创建的对象是否存在
 System.out.println("通过对象适配器进行转换");
 int s2 = 220; //给定初始值
 if(null != source){
 int s = source.out220();
 //将得到的220电压转换为5v的电压
 s2 = s/44;
 } 
 return s2; //将此时的5V电压返回。达到将220--> 5
}
}
//创建一个手机类
class Phone{
//定义一个手机充电的方法
 public void chong(target s){
 if(s.out5() == 5){
 System.out.println("电压转换为5伏可以进行充电");
 }else{
 System.out.println("电压转换失败,不能进行充电");
 } 
 }
}
//搞一个测试类来进行测试
public class Test{
 public static void main(String[] args){
 Phone p = new Phone();
 p.chong(new Adapter(new Source()));
 }
}

//输出结果:

//现有电压220V

//电压转换为5可以进行充电

**接口适配器或缺省适配器模式**

我们知道当一个类想实现一个接口的时候,必须重写接口中的所有方法(抽象类除外),因此这样不是特别的友好。因此我们就可以使用接口适配器来进行实现接口中的某一特定方法

现在我们可以通过一个抽象类来作为中间类,来间接实现接口

//测试类
public class Test_02 {
 public static void main(String[] args) {
 //通过匿名对象调用show2方法
 new Adapter2() {
 public void show() {
 System.out.println("只实现show方法");
 }
 }.show();
//如果我们直接创建接口的匿名对象时就需要重写所有的方法,通过适配器就可以用什么掉什么
 }
}
//定义一个接口
interface Fun{
 void show();
 void show2();
 void show3();
}
//定义一个抽象类来实现接口,所有的方法进行空实现
abstract class Adapter2 implements Fun{
 @Override
 public void show() {
 }
 @Override
 public void show2() {
 }
 @Override
 public void show3() {
 } 
}