浅谈Java设计模式-之-适配器模式
适配器模式是将一个类的接口变成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作,适配器模式也称变压器模式。
适配器模式主要分为两种:类适配器 和 对象适配器。
类适配器是基于继承,对象适配器是基于组合,我们推荐多用组合少用继承。
我们举个例子:
如下图,现给手机充电,但墙上均为三脚插孔,而手机充电器为两脚插头,从而无法为手机充电,所以我们需要一个带有三脚插头的插线板,同时插线板上须有两脚插孔。
如此,手机-->手机充电器插头-->插线板-->墙上的三脚插孔,完成手机充电。
一个适配器模式主要有如下几个要素:
1、Source源角色(墙上的三脚插孔)
2.、Adapter适配器角色(插线板)
3.、Target目标角色(手机充电器插头)
4、Client客户端角色(手机)
下面我们来看一下如何用代码描述这个适配器的过程:
/**源对象 (墙上的三脚插孔)*/
public class Source {
public void method() {
System.out.println("我是墙上的三脚插孔,我只接受三脚插头的");
}
}
/**适配器目标接口(手机充电器插头)*/
public interface Target {
/**与源对象中的方法相同 */
public void method();
}
/**类适配器方式,通过继承实现(插线板)*/
public class Adapter extends Source implements Target {
public void method() {
//调用父类的方法
super.method();
}
}
/**对象适配器方式,通过组合实现(插线板)*/
public class Adapter2 implements Target {
/**对源对象的引用*/
private Source source;
public Adapter2 (Source source) {
this.source = source;
}
@Override
public void method() {
source.method();
}
}
/**客户端(手机)*/
public class Client {
public static void main(String[] args) {
//类适配器方式
Target target = new Adapter();
target.method();
//对象适配器方式
Source source = new Source();
Target target2 = new Adapter2(source);
target2.method();
}
}
以上就是一个适配器模式的典型代码模板,在Java IO中,字节流InputStream转换为字符流,中间即使用了适配器模式InputStreamReader,适配器模式可以让两个没有关系的类在一起运行。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Python 3.5.2 文档
欢迎 !这是 Python 3.5.2 的文档,最后更新于 2016 年 8 月 13 日。 文档部分︰ Python 3.5 新功能或 2.0 以来所有关于"新特性"的文档 Tutorialstart here 库参考日常编程必备 语言参考描述语法和语言元素 Python 的设置和用法如何在不同平台上使用 Python Python HOWTOs关于特定主题的深入文档 安装 Python 模块从 Python 软件包或其他来源安装 分发 Python 模块发布其他人可以安装的模块 扩展和嵌入给C/C++ 程序员的教程 Python/C APIC/C + + 程序员参考手册 常见问题解答常问的问题 (附答案!) 索引表格: 全局模块索引快速访问所有模块 综合索引所有的函数、 类、 术语 术语表最权威的术语解释 搜索页搜索这个文档中的内容 完整目录列出了所有的章节和子节 元信息: 提交 bug 相关文档 Python的历史和许可证 版权所有
-
下一篇
函数计算PHP 变量不存在无法引用和判断的解决方案
最近研究了函数计算,很不错的服务,总结一个php存在的一个问题,为以后的小白们避免同样的错误。 <?php use RingCentral\Psr7\Response; function initializer($context) { echo 'initializing' . PHP_EOL; } function handler($request, $context): Response{ //$body = $request->getBody()->getContents(); $queries = $request->getQueryParams(); //$method = $request->getMethod(); //$headers = $request->getHeaders(); //$path = $request->getAttribute("path"); //$requestURI = $request->getAttribute("requestURI"); //$clientIP = $request-&...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Red5直播服务器,属于Java语言的直播服务器
- MySQL数据库在高并发下的优化方案
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Dcoker安装(在线仓库),最新的服务器搭配容器使用