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——适配器模式的更多相关文章

  1. Java设计模式之适配器模式(项目升级案例)

    今天是我学习Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一遍 ...

  2. Java设计模式----初识适配器模式

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  3. Java设计模式应用——适配器模式

    性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出. 由于告警开发进度较快,已经实现了excel导出.csv导出.zip导出功能,现在报表需要excel导出.csv导出.pdf导出功 ...

  4. Java设计模式之适配器模式(Adapter)

    转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...

  5. Java设计模式中适配器模式的实现方法

    在Java开发中,我们常常需要用到Java接口型模式中的适配器模式,那适配器设计模式到底是什么模式呢? 适配器模式(Adapter)就是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹 ...

  6. 夜话JAVA设计模式之适配器模式(adapter pattern)

    适配器模式:将一个类的接口,转换成客户期望的另一个接口,让不兼容的接口变成兼容. 1.类适配器模式:通过多重继承来实现适配器功能.多重继承就是先继承要转换的实现类,再实现被转换的接口. 2.对象适配器 ...

  7. java设计模式之适配器模式

    说到适配器,我们可能会想到电脑的适配器,没错,其实作用是一样的,电脑的适配器在中国可以使用,在美国也可以使用,它的主要作用是在新接口和老接口之间进行适配..这就是一个适配的过程,适配器模式的类图如下: ...

  8. java设计模式之——适配器模式

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...

  9. java设计模式之六适配器模式(Adapter)

    适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模 ...

随机推荐

  1. HDU2089 不要62 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目大意:求区间 \([l,r]\) 范围内不包含数字"4"且不包含连续的数 ...

  2. 「BZOJ4590」「SHOI2015」 自动刷题机 解题报告

    自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法, ...

  3. Spring事务失效的 8 大原因,这次可以吊打面试官了!

    今天再来一篇<吊打面试官>系列,这次真的要吊打了,哈哈!(看往期吊打系列请在后台回复:吊打,我会陆续更新--) 前几天栈长不是发了一篇文章,里面有一个关于事务失效的问题: 用 Spring ...

  4. 基于Arduino的红外遥控

    1.红外接收头介绍  一.什么是红外接收头?  红外遥控器发出的信号是一连串的二进制脉冲码.为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调制在特定的载波频率上,然后再经红外发射二极管 ...

  5. GXOI&GZOI

    T1 与或和   2s&&512MB   简明题意:求一个矩阵的所有子序列的 \(and\)和 和\(or\)和: 子矩阵的\(and\)和就是所有值\(and\)起来:\(or\)类 ...

  6. HTML中使用Vue+Dhtmlxgantt制作任务进度图

    HTML中使用Vue+Dhtmlxgantt制作任务进度图 Dhtmlxgantt官网: https://dhtmlx.com/docs/products/dhtmlxGantt/ 参考文章 甘特图配 ...

  7. 解决android sdk无法更新 更新慢的问题

    使用不同平台开发android应用的时候都要先搭建开发环境. 这里介绍一下搭建开发环境过程中更新和下载android sdk的一种方法: 第一步:配置android sdk manager的代理服务, ...

  8. 【杂项】各类文件头结合winhex使用-转载

    ———常用文件头——— JPEG (jpg),文件头:FFD8FFE1 PNG (png),文件头:89504E47 (0D0A1A0A) GIF (gif),文件头:47494638 ZIP Arc ...

  9. C语言进阶——全局变量

    全局变量 ·定义在函数外面的变量是全局变量 ·全局变量具有全局的生存期和作用域 ·它们与任何函数都无关 ·在任何函数内部都可以使用它们 全局变量初始化 ·没有做初始化的全局变量会得到0值 ·指针会得到 ...

  10. RocketMQ 实战之快速入门

    原文地址:https://www.jianshu.com/p/824066d70da8 最近 RocketMQ 刚刚上生产环境,闲暇之时在这里做一些分享,主要目的是让初学者能快速上手RocketMQ. ...