java设计模式5——适配器模式
java设计模式5——适配器模式
1、结构型模式介绍
1.1、作用
从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。
分类:
- 适配器模式
- 代理模式
- 桥接模式
- 装饰模式
- 组合模式
- 外观模式
- 享元模式
2、适配器模式介绍
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
本节举例:(网线和笔记本电脑)

3、第一种建模方式:(使用继承,网线和转换器绑在一起)又称为类适配器
3.1、定义要适配的类(网线)
package com.xgp.company.结构性模式.第一种_适配器模式;
/**
* 要被适配的类(网线)
*/
public class Adaptee {
public void request() {
System.out.println("连接网线上网!");
}
}
3.2、定义客户端类(电脑)
package com.xgp.company.结构性模式.第一种_适配器模式;
/**
* 客户端类:想上网,插不上网线
*/
public class Computer {
//我们的电脑需要连接上转接器才能上网
public void net(NetToUsb adapter) {
//上网的具体实现,找一个转接头
adapter.handleRequest();
}
public static void main(String[] args) {
//电脑,适配器,网线
Computer computer = new Computer();
Adapter adapter = new Adapter();
// Adaptee adaptee = new Adaptee();
computer.net(adapter);
}
}
此时,该电脑无法插入网线进行上网,因此需要适配
3.3、定义适配器的抽象实现
package com.xgp.company.结构性模式.第一种_适配器模式;
/**
* 接口转换器的抽像实现
*/
public interface NetToUsb {
//作用:处理请求(网 => usb)
public void handleRequest();
}
3.4、定义具体的网线转换器
package com.xgp.company.结构性模式.第一种_适配器模式;
/**
* 1、继承方式(类适配器)
* 2、组合(对象适配器:常用)
*/
/**
* 适配器:需要连接usb和网线
*/
public class Adapter extends Adaptee implements NetToUsb {
@Override
public void handleRequest() {
//可以上网了
super.request();
}
}
此时网线通过适配器插入了电脑,实现了上网的功能了
连接网线上网!
4、第二种建模方式:(使用组合,网线和转换器分离)又称为对象适配器
网线类和适配器的抽象类不变
4.1、适配器类的改进
package com.xgp.company.结构性模式.第二种_适配器模式;
/**
* 1、继承方式(类适配器)
* 2、组合(对象适配器:常用)
*/
/**
* 适配器:需要连接usb和网线
*/
public class Adapter implements NetToUsb {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
//可以上网了
adaptee.request();
}
}
4.2、电脑类的改进
package com.xgp.company.结构性模式.第二种_适配器模式;
/**
* 客户端类:想上网,插不上网线
*/
public class Computer {
//我们的电脑需要连接上转接器才能上网
public void net(NetToUsb adapter) {
//上网的具体实现,找一个转接头
adapter.handleRequest();
}
public static void main(String[] args) {
//电脑,适配器,网线
Computer computer = new Computer();
Adaptee adaptee = new Adaptee();
Adapter adapter = new Adapter(adaptee);
computer.net(adapter);
}
}
4.3、测试,电脑成功连上网线进行上网了
连接网线上网!
java设计模式5——适配器模式的更多相关文章
- Java设计模式之适配器模式(项目升级案例)
今天是我学习Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一遍 ...
- Java设计模式----初识适配器模式
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Java设计模式应用——适配器模式
性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出. 由于告警开发进度较快,已经实现了excel导出.csv导出.zip导出功能,现在报表需要excel导出.csv导出.pdf导出功 ...
- Java设计模式之适配器模式(Adapter)
转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...
- Java设计模式中适配器模式的实现方法
在Java开发中,我们常常需要用到Java接口型模式中的适配器模式,那适配器设计模式到底是什么模式呢? 适配器模式(Adapter)就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹 ...
- 夜话JAVA设计模式之适配器模式(adapter pattern)
适配器模式:将一个类的接口,转换成客户期望的另一个接口,让不兼容的接口变成兼容. 1.类适配器模式:通过多重继承来实现适配器功能.多重继承就是先继承要转换的实现类,再实现被转换的接口. 2.对象适配器 ...
- java设计模式之适配器模式
说到适配器,我们可能会想到电脑的适配器,没错,其实作用是一样的,电脑的适配器在中国可以使用,在美国也可以使用,它的主要作用是在新接口和老接口之间进行适配..这就是一个适配的过程,适配器模式的类图如下: ...
- java设计模式之——适配器模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...
- java设计模式之六适配器模式(Adapter)
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模 ...
随机推荐
- bootstrap:图片轮播
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- JVM之对象
几乎所有对象都是在堆中分配内存的,这次来讲讲java的对象. 对象的创建主要分为以下几步: 首先,查看类是否装载.当JVM读取到new指令的时候,会拿着符号描述去方法区寻找它所属的类,如果未查找到,则 ...
- iOS滤镜系列-滤镜开发概览
概述 滤镜最早的出现应该是应用在相机镜头前实现自然光过滤和调色的镜片,然而在软件开发中更多的指的是软件滤镜,是对镜头滤镜的模拟实现.当然这种方式更加方便快捷,缺点自然就是无法还原拍摄时的真实场景,例如 ...
- vue兄弟组件传值——事件总线
1.创建一个js文件,例如msg.js,放到合适位置,例如components中,或者其他位置也行.然后在兄弟两个组件中分别引入msg.js文件 msg.js: import Vue from 'vu ...
- feign架构 原理解析
什么是feign? 来自官网的解释:Feign makes writing java http clients easier 在使用feign之前,我们怎么发送请求? 拿okhttp举例: publi ...
- Maven 基础(二) | 解决依赖冲突的正确姿势
一.依赖原则 假设,在 JavaMavenService2 模块中,log4j 的版本是 1.2.7,在 JavaMavenService1 模块中,它虽然继承于 JavaMavenService2 ...
- 构造分组背包(CF)
Ivan is a student at Berland State University (BSU). There are n days in Berland week, and each of t ...
- VMware Workstation CentOS7 Linux 学习之路(4)--守护服务(Supervisor)
目前存在三个问题 问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生 ...
- Go 每日一库之 viper
简介 上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库. viper 是一个配置解决方案,拥有丰富的特性: 支持 JSON/TOML/YAML/HCL/envfile/ ...
- js 获取元素坐标 和鼠标点击坐标
js 获取元素的位置 var odiv=document.getElementById('divid'); alert(odiv.getBoundingClientRect().left); aler ...