java设计模式之适配器设计模式
什么是适配器模式?为什么要使用适配器模式?
适配器模式:属于结构型设计模式,适配俩个字来说很明显需要做兼容,俩者毫无关系,从而联系到一起去使用,拓展。
举个例子:我现在需要三根充电器线,我有安卓,苹果,和电脑充电器线,本身他们之间是没有任和关系的,那如何联系到一起去呢?我是不是可以弄一个线?既支持安卓,苹果和电脑,答案显然是可以的。
代码场景:
安卓充电接口类:
package com.xy.design.adatper;/*** <p>** @author xiaoyang* @since 2022-09-29*/
public interface AndiroChargerService {public void andiroBusiness();
}
安卓充电实现类:
package com.xy.design.adatper.impl;import com.xy.design.adatper.AndiroChargerService;/*** <p>* 安卓充电* @author yang* @since 2022-09-29*/
public class AppleChargerServiceImpl implements AndiroChargerService {@Overridepublic void andiroBusiness() {System.out.println("安卓充电");}
}
苹果充电接口类:
package com.xy.design.adatper;/*** <p>** @author yang* @since 2022-09-29*/
public interface AppleChargerService {public void appleBusiness();
}
苹果充电实现类:
package com.xy.design.adatper.impl;import com.xy.design.adatper.AndiroChargerService;/*** <p>* 苹果充电* @author yang* @since 2022-09-29*/
public class AppleChargerServiceImpl implements AndiroChargerService {@Overridepublic void appleBusiness() {System.out.println("苹果充电");}
}
可以从代码看出本身他们直接的业务是不影响的,互不关联的,那我们现在需要加入电脑充电线如何做兼容呢?
定义一个适配器接口:
package com.xy.design.adatper;public interface ChargerAdapter {public void charger(Object charger);
}
定义一个适配器接口实现类:
package com.xy.design.adatper.impl;import com.xy.design.adatper.AndiroChargerService;
import com.xy.design.adatper.AppleChargerService;
import com.xy.design.adatper.ChargerAdapter;/*** <p>** @author yang* @since 2022-09-29*/
public class ChargerAdapterServiceImpl implements ChargerAdapter {@Overridepublic void charger(Object charger) {if(charger instanceof AppleChargerService){((AppleChargerService)charger).appleBusiness();}if(charger instanceof AndiroChargerService){((AndiroChargerService)charger).andiroBusiness();}}
}
测试:
package com.xy.design.adatper;import com.xy.design.adatper.impl.AndiroChargerServiceImpl;
import com.xy.design.adatper.impl.AppleChargerServiceImpl;
import com.xy.design.adatper.impl.ChargerAdapterServiceImpl;/*** <p>** @author yang* @since 2022-09-24*/
public class Test {public static void main(String[] args) {ChargerAdapter chargerAdapter = new ChargerAdapterServiceImpl();chargerAdapter.charger(new AppleChargerServiceImpl());chargerAdapter.charger(new AndiroChargerServiceImpl());}
}
从代码层面来说我们的适配器和实现类只是定义了一个Object方法,然后获取到具体实现类向下转型,这样从而达到了适配,那你会说为啥不用if判断呢?直接判断实现不就行了吗?但是答案告诉你不行,因为如果需要适配的实现类太多,你代码不好管理。适配器的特性就是单一原则化,一个适配器最好是固定不变的,如果修改适配需要被实现的方法,会照成结构不连惯。
适配器的应用场景还是挺多的,跨语言,跨平台,比如jdbc连接等都是可以使用适配器模式,使用适配器模式主要还是让我们的代码变动有结构性。
————没有与生俱来的天赋,都是后天的努力拼搏(我是小杨,谢谢你的关注和支持)
java设计模式之适配器设计模式相关推荐
- Java中的适配器设计模式
适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计面向对象的应用程序时,当我们的 ...
- 【设计模式】模板设计模式与适配器设计模式
1.模板设计模式 赵本山问宋丹丹: "如何把大象放进冰箱?"宋丹丹回答:"第一步:打开冰箱门,第二步:把大象塞进 冰箱,第三步:关闭冰箱门".赵本山再问:&qu ...
- java设计模式适配器模式_Java中的适配器设计模式
java设计模式适配器模式 适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计一 ...
- 结构设计模式 - 适配器设计模式
结构设计模式 - 适配器设计模式 PANKAJ 17评论 适配器设计模式是结构设计模式之一,其使用使得两个不相关的接口可以一起工作.连接这些不相关接口的对象称为适配器. 目录[ 隐藏 ] 1适配器设 ...
- Java设计模式(七):适配器设计模式
1. 应用场景 在软件开发中,也就是系统的数据和行为都正确,但接口不相符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配.适配器模式主要应用于希望复用一些现存的类,但是接口又 ...
- 适配器设计模式,简单的Java代码模拟
/**适配器设计模式* 问题:* 接口(方法比较多)--实现类(仅仅使用一个也得把其他方法给实现了,哪怕是空实现)* 结局方案:* 接口(方法比较多)--适配器类(实现接口,仅仅是空实现)--实现类( ...
- Java 基础学习之字符串的简单操作和适配器设计模式
一 适配器设计模式 1.适配器是什么? 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作.其别名为包装器(Wrapper) ...
- Java进阶之路~适配器设计模式amp;字符串方法
一 适配器设计模式 1.类适配器(没有关系的类和接口产生联系,可以扩展功能,增加已有代码的复用性) 2.对象适配器(装饰者,使用对象进行连接,来扩展功能) 3.缺省适配器 eg:iphone6 3.5 ...
- JAVA适配器设计模式简单应用
1.为什么要有适配器设计模式 解决接口与接口实现类之间的继承矛盾问题 eg:一个食谱上有非常多的菜,蒸羊羔.蒸熊掌.蒸鹿尾儿.烧花鸭.烧雏鸡.烧子鹅.卤猪.卤鸭.酱鸡......我现在想要吃蒸羊羔,对 ...
最新文章
- LSD-SLAM解读——帧间追踪(详细推导)
- 如何将本地的项目加入git管理?
- 小TIPS:合拼gridview的header
- 牛客 - 数位操作2(数位dp)
- 《PHP和MySQL Web开发从新手到高手(第5版)》一一第1章 安装
- 深度学习环境搭建之Anaconda安装keras
- C++学习之路 | PTA(天梯赛)—— L2-024 部落 (25分)(带注释)(并查集)(精简)
- 每日一则----算法----二分查找法
- FusionCharts-堆栈图、xml格式、刷新数据、添加事件link、传参
- 可以参考临摹借鉴的中国风新年海报模板
- “神经网络”的逆袭:图解80年AI斗争史
- ASP.NET 事件(回传)机制
- 中缀表达式转后缀表达式规则
- oracle 监听 开机启动命令,如何让oracle DB、监听和oem开机启动(dbstart)
- EXPLAIN查看SQL执行计划
- 烟花php,基于HTML5 canvas的逼真烟花特效插件jquery.fireworks.js
- dht网络协议 服务器,概述DHT网络
- Winform 调整SplitContainer中Panel的大小
- 曲线运动与万有引力公式_高中物理公式大全
- Krypital Group(金氪资本)宣布完成对Ambrus Studio的战略投资