6.适配器模式Adapter

意图:把一个类的接口变换成客户端所期待的另一种接口,使原本因接口不匹配的两个类能够在一起工作
情景:很多人都喜欢在国内玩外服,可以虐老外嘛- -,但是有个缺点就是语言不通,这里我们可以设计一个功能,将玩家输入的语言自动转换为需要的语言,就用到了适配器模式

1.对象适配

中文接口
public interface Chinese {
void speak (String msg) ;
}

英语类
public class English {
void speak (String msg) {
Log. e ( "tag" , " 英语 :" +msg) ;
}
}

适配器类
/**
* Created by LSX on 2018/4/18.
*/

public class Adapter implements Chinese{
private English mEnglish ;

public Adapter (English mEnglish) {
this . mEnglish = mEnglish ;
}

@Override
public void speak (String msg) {
Log. e ( "tag:" , msg) ;
mEnglish .speak(msg) ;
}
}

在适配器类种完成转换而已


2.类适配: adapter添加English父类,其他和上面一样


/**
* Created by LSX on 2018/4/18.
*/

public class ClassAdapter extends English implements ClassChinese {

@Override
public void speakChinese (String msg) {
speakEnglish(msg) ;
}
}






类适配是直接继承的方式,不需要传入多余的参数,缺点就是不够灵活

3.缺省适配器: 简单的说就是不想实现一个接口的所有方法,比如上面的中文接口,里面增加了普通话三东话和四川话,但是我只想实现普通话,这时就可以创建一个baseAdapter空实现接口的所有方法,让子类选择性继承

中文接口
public interface DefaultChinese {
void speakMandarin (String msg) ;
void speakCantonese (String msg) ;
}

英语类
public class DefaultEnglish {
void speak (String msg) {
Log. e ( "tag" , " 英语 :" +msg) ;
}
}

适配器基类
public class DefaultBaseAdapter implements DefaultChinese{
@Override
public void speakMandarin (String msg) {

}

@Override
public void speakCantonese (String msg) {

}
}

适配器类
public class DefaultAdapter extends DefaultBaseAdapter {
private DefaultEnglish mEnglish ;

public DefaultAdapter (DefaultEnglish mEnglish) {
this . mEnglish = mEnglish ;
}

@Override
public void speakMandarin (String msg) {
Log. e ( "tag:" , msg) ;
mEnglish .speak(msg) ;
}
}



































评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值