夜话JAVA设计模式之适配器模式(adapter pattern)
适配器模式:将一个类的接口,转换成客户期望的另一个接口,让不兼容的接口变成兼容。
1.类适配器模式:通过多重继承来实现适配器功能。多重继承就是先继承要转换的实现类,再实现被转换的接口。
2.对象适配器模式:通过组合来实现适配器。
什么是适配器模式?或者说适配器模式有什么作用呢?上面已经定义的很清楚了。下面我们再用一张草图来更形象的描述这一设计模式。
这确实是一张草图,图中1就好比我们的普通耳机接口,3就好比苹果手机接口,2就好比耳机转接头,只有这样苹果手机才能使用普通耳机,模块2就相当于一个适配器。
对于我们程序中的代码来说,1是我们自己系统的接口,3是其他厂家的系统接口,2就是我们为了对接这两个系统加的适配器。这样就不至于修改1,3部分的代码。
适配器工作看起来就像一个中间人,那么让我们来看看具体JAVA代码的表述:
耳机3.5mm接口:
/**
* 耳机 : 3.5mm接口
* @author monkjavaer
* @date 2018/08/29 21:32
*/
public interface Is35mmEarPhone { /**
* 这是3.5mm接口耳机
*/
void is35mmEarPhone(); }
type-C接口:
/**
* type-C接口
* @author monkjavaer
* @date 2018/08/29 21:29
*/
public interface TypeC { /**
* type-C接口
*/
void isTypeC();
}
华为某款手机类实现type-c接口:
/**
* 手机Type-c接口
* @author monkjavaer
* @date 2018/08/29 21:45
*/
public class PhoneTpyeC implements TypeC { @Override
public void isTypeC() {
System.out.println("我是手机Type-C接口");
}
}
那么问题来了,怎么让只有type-c接口的华为手机能使用3.5mm接口的耳机呢?当然是适配器模式了。
类适配器模式:
/**
* 耳机3.5mm接口转换为Type-C接口的适配器
*
* 类适配器模式:通过多重继承来实现适配器功能。多重继承就是先继承要转换的实现类,再实现被转换的接口。
* @author monkjavaer
* @date 2018/08/29 21:47
*/
public class ClassAdapter extends PhoneTpyeC implements Is35mmEarPhone { @Override
public void is35mmEarPhone() {
isTypeC();
}
}
test:
/**
* 通过适配器将3.5mm接口转换为type-c接口
* @author monkjavaer
* @date 2018/08/29 22:11
*/
public class ClassAdapterTest { public static void main(String[] args) { Is35mmEarPhone is35mmEarPhone = new ClassAdapter();
is35mmEarPhone.is35mmEarPhone(); } }
输出:我是手机Type-C接口.
对象适配器模式:
/**
* 耳机3.5mm接口转换为Type-C接口的适配器
*
* 对象适配器模式:通过组合来实现适配器
* @author monkjavaer
* @date 2018/08/29 22:14
*/
public class ObjectAdapter implements Is35mmEarPhone{ TypeC typeC; public ObjectAdapter(TypeC typeC) {
this.typeC = typeC;
} @Override
public void is35mmEarPhone() {
typeC.isTypeC();
}
}
test:
/**
* 通过适配器将3.5mm接口转换为type-c接口
* @author monkjavaer
* @date 2018/08/29 22:19
*/
public class ObjectAdapterTest { public static void main(String[] args) {
Is35mmEarPhone is35mmEarPhone = new ObjectAdapter(new PhoneTpyeC());
is35mmEarPhone.is35mmEarPhone();
}
}
输出:我是手机Type-C接口
夜话JAVA设计模式之适配器模式(adapter pattern)的更多相关文章
- Java设计模式之适配器模式(Adapter Pattern)
Adapter Pattern的作用是在不改变功能的前提下转换接口.Adapter分为两类,一类是Object Adapter, 还有一类是Class Adapter.因为Class Adapter的 ...
- 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)
怎样让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 标签: 设计模式初涉 概念相关 定义: 适配器模式把一个类的接口变换成client所期待的还有一种接口,从而 使原本因接 ...
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
原文:乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabc ...
- 二十四种设计模式:适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern) 介绍将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.示例有一个Message实体类 ...
- 【设计模式】适配器模式 Adapter Pattern
适配器模式在软件开发界使用及其广泛,在工业界,现实中也是屡见不鲜.比如手机充电器,笔记本充电器,广播接收器,电视接收器等等.都是适配器. 适配器主要作用是让本来不兼容的两个事物兼容和谐的一起工作.比如 ...
- Java设计模式之适配器模式(Adapter)
转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...
- java设计模式之六适配器模式(Adapter)
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模 ...
- 【UE4 设计模式】适配器模式 Adapter Pattern
概述 描述 将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper). 套路 Target(目标抽象类) 目标抽象类定义了客户所需要的接口,可 ...
- 设计模式系列之适配器模式(Adapter Pattern)——不兼容结构的协调
模式概述 模式定义 模式结构图 模式伪代码 类适配器,双向适配器,缺省适配器 类适配器 双向适配器 缺省适配器 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 主要缺点 适 ...
随机推荐
- Storm编程入门API系列之Storm的定时任务实现
概念,见博客 Storm概念学习系列之storm的定时任务 Storm的定时任务,分为两种实现方式,都是可以达到目的的. 我这里,分为StormTopologyTimer1.java 和 Sto ...
- H5调用百度地图API获取地理位置
<script src="http://api.map.baidu.com/api?v=2.0&ak=填入申请的AK"></script> < ...
- 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
在这里给大家分享下我的心得,1.写代码前一定要对整个流程有个了解.我就是因为在先不了解整个过程中去ctrl+c+v他人的博客代码,花费很多无用的时间去处理还不知道能不能跑的起来的代码. 2.本人比较喜 ...
- CSS布局整理
目录 常用居中方法 水平居中 垂直居中 单列布局 二列&三列布局 float+margin position+margin 圣杯布局(float+负margin) 双飞翼布局(float+负m ...
- C# 调用Mysql 带参数存储过程
使用C#调用Mysql 带参数的存储过程: 1.创建带参数的存储过程:USP_Temp_Test 2.两个参数:IN 参数为 P_XML , OUT 参数为 P_ErrorOut 3.C#代码调用该存 ...
- self和super的区别
(1)self调用自己方法,super调用父类方法 (2)self是类,super是预编译指令 (3)[self class]和[super class]输出是一样的 ①当使用 self 调用方法时, ...
- 【sqli-labs】 less64 GET -Challenge -Blind -130 queries allowed -Variation3 (GET型 挑战 盲注 只允许130次查询 变化3)
双括号整型 http://192.168.136.128/sqli-labs-master/Less-64/?id=1)) or ((1
- HDU_2112_最短路
题目链接:http://acm.hdu.edu.cn/status.php?user=l1526789512&pid=2112&status=5 HDU Today Time Limi ...
- 基于 CentOS 搭建Seafile个人网盘
一.安装 Seafile 安装依赖环境使用 yum 安装 Python 及 MySQL: yum install python python-setuptools python-imaging pyt ...
- webstom2017最新破解 ------------ http://blog.csdn.net/voke_/article/details/76418116
webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊. 方法一:(更新时间:2018/1/23)v3.3 注册时,在打开的License ...