设计模式 06 适配器模式
参考源
https://www.bilibili.com/video/BV1mc411h719?p=5&vd_source=299f4bc123b19e7d6f66fefd8f124a03
适配器模式(Adapter Pattern)属于结构型模式
结构型模式关注如何将现有的类或对象组织在一起形成更加强大的结构。
在生活中,我们经常遇到这样的一个问题:轻薄笔记本通常只有 type-c 或者 usb-a 接口,没有网口。
但日常使用中是往往需要连接网口上网的,这时想到的第一个解决方案,就是去买一个转接头或者扩展坞。
它们可以将 type-c 或者 usb-a 转换为其他类型的接口供我们使用,实际上这就是一种适配器模式。
包括我们常用的充电头,为什么叫电源适配器呢?
传统的供电是 220V 交流电,但是手机可能只需要 5V 的电压进行充电,所以虽然现在有电,但是不能直接充。
也不可能让电力公司专门为我们提供一个 5V 的直流电使用,这时电源适配器就开始发挥作用了。
比如苹果的祖传 5V1A 充电头,实际上就是将 220V 交流电转换为 5V 的直流电进行传输。
这样就相当于在 220V 交流电和手机之间,做了一个适配器的角色。
适配器模式分为类适配器和对象适配器。
这里以电脑需要转接器连接网线上网为例。
类适配器
1、定义电脑
/**
- 电脑
想上网,需要插网线
*/
public class Computer {
/*** 电脑需要连接上转换器才可以上网** @param adapter 转接器*/
public void connect(NetToUsb adapter) {// 上网的具体实现,找一个转接头adapter.connectNetLine();
}
}
2、定义网线
/**
网线
*/
public class NetLine {/**
- 上网/
public void online(){
System.out.println("连接网线上网");
}
}
3、定义 usb 转网口转接器
/*
- 上网/
转接器
*/
public interface NetToUsb {/**
- 处理请求,usb -> 网线/
void connectNetLine();
}
4、定义类适配器
/*
- 处理请求,usb -> 网线/
类适配器
*/
public class ClassAdapter extends NetLine implements NetToUsb {@Override
public void connectNetLine() {
// 可以上网了
super.online();
}
}
5、使用适配器连接网线上网
// 电脑
Computer computer = new Computer();
// 转接器已经插上网线
ClassAdapter adapter = new ClassAdapter();
// 电脑连接转接器,成功上网
computer.connect(adapter);
这种实现方式需要占用一个继承位。
如果此时 NetToUsb 不是接口而是抽象类的话,由于 Java 不支持多继承,就无法实现了。
同时根据合成复用原则,应该更多的通过合成的方式去实现功能。
所以来看看第二种,也是用的比较多的一种模式,对象适配器。
对象适配器
4、定义对象适配器
/**对象适配器
*/
public class ObjectAdapter implements NetToUsb {/**
- 网线
*/
private NetLine netLine;
public ObjectAdapter(NetLine netLine) {
this.netLine = netLine;
}@Override
public void connectNetLine() {
// 可以上网了
netLine.online();
}
}
5、使用适配器连接网线上网
/**- 网线
测试示例
*/
public class ObjectAdapterTest {@Test
public void test() {
// 电脑
Computer computer = new Computer();
// 网线
NetLine netLine = new NetLine();
// 转接器插上网线
ObjectAdapter adapter = new ObjectAdapter(netLine);
// 电脑连接转接器,成功上网
computer.connect(adapter);
}
}
这样的方式不会占用继承位,且满足合成复用原则,耦合度更低,也更加灵活,推荐使用。
设计模式 06 适配器模式相关推荐
- C#设计模式(7)——适配器模式(Adapter Pattern)
一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将"将现存的对象" ...
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
[索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...
- 跟JBPM学设计模式之适配器模式
跟JBPM学设计模式之适配器模式 模式简介 适配器模式(Adapter),将一个类的接口转换成客户希望的另一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 说起适配器模式 ...
- python适配器模式角色_Python设计模式之适配器模式原理与用法详解
本文实例讲述了Python设计模式之适配器模式原理与用法.分享给大家供大家参考,具体如下: 适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口. 下面是一个适配 ...
- 【设计模式】—— 适配器模式Adapter
模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...
- 设计模式适配器模式_21世纪的设计模式:适配器模式
设计模式适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面. 在另一个世界,我们有不同的界面. 这两个接口有 ...
- Java面试题:单例设计模式、适配器模式的不同方式
QUESTION:单例设计模式.适配器模式的不同方式? ANSWER: 1.单例设计模式,适配器设计模式 单利设计模式: 在java中,单例模式是指为了保证类在内存中只 ...
- [学习笔记]设计模式[6]-{适配器模式外观模式}
设计原则 最少知识原则:只和你的密友谈话 这个原则的意思是,在系统设计的过程中,不要让太多的类耦合在一起,免得对系统一部分的修改会影响到其他部分.在设计系统之前,应该首先注意对象与对象之间的交互关系, ...
- 适配器模式_21世纪的设计模式:适配器模式
适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面: 在另一个世界中,我们有不同的界面. 这两个接口有不同的 ...
最新文章
- 图灵2010.02书讯
- 2264: sequence(KMP)
- 2019牛客多校第一场
- 使用DynamoDBMapper扫描DynamoDB项目
- 【转】ASP.NET内幕 - IIS处理模型
- java controller json_springMVC的controller层接收前端json数据
- php 汉王云名片_汉王云-名片识别【最新版】_OCR_人工智能_API-云市场-阿里云
- 大前端时代安全性如何做
- Hudson dryRun jobs break after upgrade from 2.2.0 to 2.2.1
- BZOJ4998 星球联盟(LCT+双连通分量+并查集)
- Ubuntu 定时锁屏改进
- 今年秋季 MacBook Pro 将迎来六大变化
- 用Python写游戏脚本原来这么简单
- 安卓手机无线投屏电脑 手机电脑同屏
- 路由器 RIP-2 配置
- 最简单的人脸检测(免费调用百度AI开放平台接口)
- Oracle 考试题 答案
- 如何让网站在浏览器网址前面显示小图标?ico图标怎么放?
- 《守望先锋》中的网络同步技术
- msf之msfvenom的使用—使用Kali渗透工具生成远控木马
热门文章
- 嵌入式Linux 串口编程系列4——EasyARM287开发板通过freemodbus实现Modbus通信
- 2018TOP100峰会案例征集启动| 共同见证100+精选技术案例的诞生
- JDBC:JAVA连接Mysql实现增删改查
- Docker----onlyoffice在线协作文档
- 易支付网站源码+免签约接口php源码
- orbslam2-基础理论(六)-g2o(常用的优化算法)
- 虚拟机上安装Oracle 12c 单机到单机的DG
- 《网络攻防》第六周作业
- 源品汇公司受邀参加第五届中国食品安全高层对话
- apache mina 学习(十)-----Codec Filter