首页
TVP 最新优惠活动
学习
活动
专区
工具
返回腾讯云官网
今天我来全面总结一下Android开发中最常用的设计模式 - 适配器模式
适配器模式,即定义一个包装类,用于包装不兼容接口的对象
包装类 = 适配器Adapter; 被包装对象 = 适配者Adaptee = 被适配的类
把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。
适配器模式的形式分为:类的适配器模式和对象的适配器模式
原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
类的适配器模式是把适配的类的API转换成为目标类的API。
2.1.1 UML类图 & 组成
在上图中可以看出:
Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的
2.1.2 使用步骤(代码解析)
步骤1: 创建Target接口;
public interface Target {
//这是源类Adapteee没有的方法
public void Request();
}
步骤2: 创建源类(Adaptee) ;
public class Adaptee {
public void SpecificRequest(){
}
}
步骤3: 创建适配器类(Adapter)
//适配器Adapter继承自Adaptee,同时又实现了目标(Target)接口。
public class Adapter extends Adaptee implements Target {
//目标接口要求调用Request()这个方法名,但源类Adaptee没有方法Request()
//因此适配器补充上这个方法名
//但实际上Request()只是调用源类Adaptee的SpecificRequest()方法的内容
//所以适配器只是将SpecificRequest()方法作了一层封装,封装成Target可以调用的Request()而已
@Override
public void Request() {
this.SpecificRequest();
}
}
步骤4: 定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标
public class AdapterPattern {
public static void main(String[] args){
Target mAdapter = new Adapter();
mAdapter.Request();
}
}
2.1.3 实例讲解 接下来我用一个实例来对类的适配器模式进行更深一步的介绍。 a. 实例概况
即适配器模式中的类的适配器模式
b. 使用步骤 步骤1: 创建Target接口(期待得到的插头):能输出110V(将220V转换成110V)
public interface Target {
//将220V转换输出110V(原有插头(Adaptee)没有的)
public void Convert_110v();
}
步骤2: 创建源类(原有的插头) ;
class PowerPort220V{
//原有插头只能输出220V
public void Output_220v(){
}
}
步骤3: 创建适配器类(Adapter)
class Adapter220V extends PowerPort220V implements Target{
//期待的插头要求调用Convert_110v(),但原有插头没有
//因此适配器补充上这个方法名
//但实际上Convert_110v()只是调用原有插头的Output_220v()方法的内容
//所以适配器只是将Output_220v()作了一层封装,封装成Target可以调用的Convert_110v()而已
@Override
public void Convert_110v(){
this.Output_220v;
}
}
步骤4: 定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标(不需要通过原有插头)
//进口机器类
class ImportedMachine {
@Override
public void Work() {
System.out.println("进口机器正常运行");
}
}
//通过Adapter类从而调用所需要的方法
public class AdapterPattern {
public static void main(String[] args){
Target mAdapter220V = new Adapter220V();
ImportedMachine mImportedMachine = new ImportedMachine();
//用户拿着进口机器插上适配器(调用Convert_110v()方法)
//再将适配器插上原有插头(Convert_110v()方法内部调用Output_220v()方法输出220V)
//适配器只是个外壳,对外提供110V,但本质还是220V进行供电
mAdapter220V.Convert_110v();
mImportedMachine.Work();
}
}
与类的适配器模式相同,对象的适配器模式也是把适配的类的API转换成为目标类的API。
与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。
2.2.1 UML类图
在上图中可以看出:
Adapter与Adaptee是委派关系,这决定了适配器模式是对象的。 2.2.2 使用步骤(代码解析)
步骤1: 创建Target接口;
public interface Target {
//这是源类Adapteee没有的方法
public void Request();
}
步骤2: 创建源类(Adaptee) ;
public class Adaptee {
public void SpecificRequest(){
}
}
步骤3: 创建适配器类(Adapter)(不适用继承而是委派)
class Adapter implements Target{
// 直接关联被适配类
private Adaptee adaptee;
// 可以通过构造函数传入具体需要适配的被适配类对象
public Adapter (Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void Request() {
// 这里是使用委托的方式完成特殊功能
this.adaptee.SpecificRequest();
}
}
步骤4: 定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标
public class AdapterPattern {
public static void main(String[] args){
//需要先创建一个被适配类的对象作为参数
Target mAdapter = new Adapter(new Adaptee());
mAdapter.Request();
}
}
在这里我就不再举实例进行讲解了(详情请看上面“进口机器的插头”),只是在适配类实现时将“继承”改成“在内部委派Adaptee类”而已
优点
缺点
优点
缺点
优点
缺点
特别是需要重新定义Adaptee行为时需要重新定义Adaptee的子类,并将适配器组合适配
总结 建议尽量使用对象的适配器模式,多用合成/聚合、少用继承。 当然,具体问题具体分析,根据需要来选用合适的实现方式
本文主要对适配器模式进行了全面介绍,接下来将介绍其他设计模式,有兴趣可以继续关注 Carson_Ho的安卓开发笔记!!!!
本文分享自 作者个人站点/博客 前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
玻璃钢生产厂家巫山玻璃钢花盆花器常州杯子型玻璃钢花盆商场冬季美陈吊饰十二生肖玻璃钢雕塑批发上饶特色玻璃钢雕塑贵州玻璃钢花盆厂家北京城市几何玻璃钢雕塑蚌埠户外玻璃钢雕塑优势芜湖玻璃钢雕塑设计与制作商场外广场美陈 灯海佛山透明玻璃钢雕塑现货抽象玻璃钢雕塑厂玻璃钢艺术雕塑报价玻璃钢佛像雕塑品牌好开封玻璃钢喷泉雕塑制作阿克苏玻璃钢卡通雕塑玻璃钢雕塑制作流程图山东玻璃钢鹿动物雕塑工艺厂浚县玻璃钢雕塑设计渭南玻璃钢钢雕塑沧州玻璃钢卡通雕塑厂家供应山西标牌玻璃钢景观雕塑盐城玻璃钢景观雕塑加工价格马鞍山玻璃钢花盆花器云南玻璃钢雕塑供应圣诞节玻璃钢雕塑作品买玻璃钢景观雕塑注意什么阳江玻璃钢樱桃雕塑上海常用商场美陈研发公司盐城玻璃钢仿铜雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万