# gupaoedu-vip-pattern-adapter **Repository Path**: 970425268/gupaoedu-vip-pattern-adapter ## Basic Information - **Project Name**: gupaoedu-vip-pattern-adapter - **Description**: java架构师_设计模式_适配器模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2019-06-14 - **Last Updated**: 2022-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java架构师-设计模式-适配器模式 标签(空格分隔): java架构师-设计模式 --- ## 适配器模式:***兼容转换头*** spring 可参考 AdvisorAdapter,HandleAdapter ## 应用场景 适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使 原本的接口不兼容的类可以一起工作,属于结构型设计模式。 适配器适用于以下几种业务场景: 1、已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情况。 2、适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不 同厂家造成功能类似而接口不相同情况下的解决方案。有点亡羊补牢的感觉。 生活中也非常的应用场景,例如电源插转换头、手机充电转换头、显示器转接头。 ![QQ截图20190614195332.png-202kB][1] 在中国民用电都是 220V 交流电,但我们手机使用的锂电池使用的 5V 直流电。因此,我 们给手机充电时就需要使用电源适配器来进行转换 ## 第三放登录场景 下面我们来一个实际的业务场景,利用适配模式来解决实际问题。年纪稍微大一点的小伙伴一定经历过这样一个过程。我们很早以前开发的老系统应该都有登录接口,但是随着业务的发展和社会的进步,单纯地依赖用户名密码登录显然不能满足用户需求了。现在,我们大部分系统都已经支持多种登录方式,如 QQ 登录、微信登录、手机登录、微博登录等等,同时保留用户名密码的登录方式。虽然登录形式丰富了,但是登录后的处理逻辑可以不必改,同样是将登录状态保存到 session,遵循开闭原则。 至此,我们在遵循开闭原则的前提下,完整地实现了一个兼容多平台登录的业务场景。当然,我目前的这个设计也并不完美,仅供参考,感兴趣的小伙伴可以继续完善这段代码。例如适配器中的参数目前是写死为 String,改为 Object[]应该更合理。 # **适配器模式跟策略模式好像区别不大?** 在这里我要强调一下,适配器模式主要解决的是功能兼容问题,单场景适配大家可能不会和策略模式有对比。但多场景适配大家产生联想和混淆了。其实,大家有没有发现一个细节,我给每个适配器都加上了一个support()方法,用来判断是否兼容,support()方法的参数也是 Object 的,而supoort()来自于接口。适配器的实现逻辑并不依赖于接口,我们完全可以将 LoginAdapter 接口去掉。而加上接口,只是为了代码规范。上面的代 适配器模式的优缺点 优点: 1、能提高类的透明性和复用,现有的类复用但不需要改变。 2、目标类和适配器类解耦,提高程序的扩展性。 3、在很多业务场景中符合开闭原则。 缺点: 1、适配器编写过程需要全面考虑,可能会增加系统的复杂性。 2、增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱 [1]: http://static.zybuluo.com/countryday163/3aqf6ove7s7vwe3z0uut5lse/QQ%E6%88%AA%E5%9B%BE20190614195332.png