java适配器模式_适配器设计模式Java详解

d9ec7a1e75e52e58776dc8a47ca556f0.png

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

类适配器:

画图理解

f0ed8f5e21cc8351ae51c85a0409cf9e.png

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

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

画图理解

f5c907672db53759a4910cdbeedbbbf6.png

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

代码演示:

//创建一个目标接口

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的代码在这上边是真的不好看!还不好弄,凑活看吧

对象适配器:

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

来张图:

3e90d70c145488e92405bcd76317845f.png

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

//创建一个目标接口

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() {

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值