关于适配器模式:设计模式61-初探适配器模式

设计模式文章汇合:http://aphysia.cn/categories/... 开局一张图,剩下全靠写... 介绍适配器模式(百度百科):在计算机编程中,适配器模式(有时候也称包装款式或者包装)将一个类的接口适配成用户所期待的。一个适配容许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类本人的接口包裹在一个已存在的类中。适配器模式的次要目标就是为了兼容性,把原来不匹配的两个类或者接口能够协同工作,它属于结构型模式,次要分为三种:类适配器,对象适配器,接口适配器。 适配器模式灵活性比拟好,能够进步复用性,然而如果滥用,零碎调用关系会比较复杂,每一次的适配,实质上都是一种斗争。 一直斗争,最初迎来的,必然是重构。 适配器模式类型类适配器形容:适配器的类(Adapter),通过继承原有类,同时实现目标接口,实现的性能是领有原有类的属性办法,同时能够调用指标接口。例子:原来一种充电器(指标类)能够给IPhone充电,另一种充电器(接口)能够给Android手机充电,咱们想实现一种适配器能够让IPhone充电器领有Android充电器的性能。 代码构造如下: AndroidCharger.class://给android充电的接口public interface AndroidCharger { public void androidout();}AppleCharger.class //给苹果充电的类public class AppleCharger { public void iphoenOut(){ System.out.println("我是充电器,我能够给苹果充电..."); }}ChagerAdapater.class //充电适配器public class ChagerAdapater extends AppleCharger implements AndroidCharger { @Override public void androidout() { iphoenOut(); System.out.println("适配器开始工作----"); System.out.print("我领有了给Android充电的能力"); }}Test.class public class Test { public static void main(String[]args){ ChagerAdapater chagerAdapater = new ChagerAdapater(); chagerAdapater.androidout(); }}运行后果如下: 集体了解:这里之所以一个继承一个接口,是因为java只能单继承,要去适配多个类,只能一个继承,一个用接口实现,有肯定局限性。重写它的办法,这也比拟灵便,能够对接口办法进行批改。2.对象适配器集体了解:下面所说的类适配器是通过继承与实现接口的形式实现(所继承的父类以及接口都是一个class),对象适配器就是依据“合成复用准则”,不应用继承关系,而是应用了关联关系,间接把另一个类的对象当成成员对象,也就是持有之前须要继承的类的实例。代码构造没有扭转,只是从新创立了一个包: 更改后的 ChagerAdapater.class //充电适配器public class ChagerAdapater implements AndroidCharger { //持有苹果充电器的实例 private AppleCharger appleCharger; //结构器 public ChagerAdapater(AppleCharger appleCharger){ this.appleCharger = appleCharger; } @Override public void androidout() { System.out.println("适配器开始工作----"); System.out.print("我领有了给Android充电的能力"); }}更改后的 Test.class ...

December 14, 2021 · 2 min · jiezi

Java描述设计模式07适配器模式

一、适配器模式简介1、基础概念适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式有类适配器模式和对象适配器模式,以及缺省(接口)适配器,三种不同的形式。2、生活场景基于适配器模式,把220V的电压,转换为需要的110V电压。 public class C01_InScene { public static void main(String[] args) { CurrentAdapter adapter = new CurrentAdapter() ; System.out.println(adapter.get110VCurrent()) ; }}// 220V电流class Current220V { public int get220VCurrent (){ return 220 ; }}// 110V电流接口interface Current110V { int get110VCurrent () ;}// 电流适配器class CurrentAdapter extends Current220V implements Current110V { // 电流转换方法 @Override public int get110VCurrent() { int high = get220VCurrent() ; int low = high/2 ; return low ; }}二、类适配器1、模式简介类的适配器模式把适配的类的API转换成为目标类的API。 ...

August 18, 2019 · 2 min · jiezi

结构型模式:适配器模式

文章首发:结构型模式:适配器模式七大结构型模式之一:适配器模式。简介姓名 :适配器模式英文名 :Adapter Pattern价值观 :老媒人,牵线搭桥个人介绍 :Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。(来自《设计模式之禅》)你要的故事大家有买过港式的 Apple 产品么?在深圳的同学估计买过,毕竟港式的 Apple 产品基本比国内便宜 500 以上。我手机和平板都是在香港买的,买来后这充电器是没法直接充电的,因为港版的电子产品都是英式的插头,而咱们国内是中式的,所以用上港版电子产品的同学免不了要用上这么一个转换器:将英式的插孔转为中式的插孔,方可插入咱家里的插座充电。这个转换器就是今天想讲的适配器。没见过的同学可以看看图片熟悉一下,下图右边为港版苹果手机充电器,插头比较大,左边为某品牌转换器,插头为中国家用标准形状。下图为使用时的图片在这描述一下这个场景。用港式插头要在国内充电,因为插头和插座大小对不上,所以需要加一个适配器,这个适配器充当插头和插座,它的插头可以插入国内标准的插座,它的插座可以插入港式标准的插头,这样子就可以用港式充电器在国内为手机充电。下面用适配器模式代码实现这个场景。首先需要找到被适配的对象是什么?在这里我们的被适配对象是英式充电器。/** * 英式充电器 /class BritishCharger { public void chargeByBritishStandard(){ System.out.println(“用英式充电器充电”); }}在这个场景的目的是什么?在中国为港式手机充电,因此目的是让英式充电器能够在中国标准的插座充电。/* * 使用中式插座充电 /interface Target { void chargeByChineseStandard();}接下来是这个设计模式的主角:适配器。它需要连接中式插座以及英式充电器,在中间做适配功能。/* * 充电器适配器 */class ChargerAdapter implements Target { private BritishCharger britishCharger; public ChargerAdapter(BritishCharger britishCharger) { this.britishCharger = britishCharger; } @Override public void chargeByChineseStandard() { System.out.println(“使用中英式插头转换器”); britishCharger.chargeByBritishStandard(); }}上面是适配器模式的一个简单的例子,要学习适配器模式也可以看看 Java 的 IO 实现源码,里面是应用适配器模式的官方很好的代码。总结适配器很好的将 2 个无法关联的类结合起来,在中间起桥梁作用。另外新增适配器代码不会影响原来被适配者的正常使用,他们可以一起被使用。在工作中和外部系统对接的时候,大可能外部系统的数据格式和自己系统的数据格式并不相同,这时候就可以利用适配器模式来实现。推荐阅读行为型模式:访问者模式行为型模式:解释器模式行为型模式:备忘录模式公众号后台回复『大礼包』获取 Java、Python、IOS 等教程加个人微信备注『教程』获取架构师、机器学习等教程 ...

April 17, 2019 · 1 min · jiezi