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. java数据结构之常用排序算法

    冒泡排序 private void maopao(int arr[]) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j &l ...

  2. 【转】Beyond compare4密钥

    转:https://blog.csdn.net/lemontree1945/article/details/92963423 w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPc ...

  3. C#调用JS的WebService的方法返回null

    连上了别人的VPN后,使用WebService测试软件测试了一下,结果正常,但是当我在vs里面添加WebService服务,调用的时候就出现了问题,问题如下图: 后来问了一下服务端那边的同事,他们说服 ...

  4. Java五子棋小游戏(控制台纯Ai算法)

    Java五子棋小游戏(控制台纯Ai算法) 继续之前的那个五子棋程序 修复了一些已知的小Bug 这里是之前的五子棋程序 原文链接 修复了一些算法缺陷 本次增加了AI算法 可以人机对战 也可以Ai对Ai看 ...

  5. Deferred shading rendering path翻译

    Overview 概述 When using deferred shading, there is no limit on the number of lights that can affect a ...

  6. vscode中nodejs智能提示

    简单粗暴,直接在项目中,运行npm install --save-dev @types/node命令,然后就ok了.

  7. .NET Core 3 WPF MVVM框架 Prism系列之事件聚合器

    本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用事件聚合器实现模块间的通信 一.事件聚合器  在上一篇 .NET Core 3 WPF MVVM框架 Prism系列之模块化 ...

  8. go slice与函数传值的理解

    go语言中所有的传值方式都是传值操作. 今天遇到了以下代码: func main(){ slice := make([],) fmt.Println(slice) change(s) fmt.Prin ...

  9. Spring学习记录4——Spring对DAO的支持

    Spring对DAO的支持 随着持久化技术的持续发展,Spring对多个持久化技术提供了集成支持,包括Hibernate.MyBatis.JPA.JDO:此外,还提供了一个简化JDBC API操作的S ...

  10. dp-最长回文串

    博客 : http://blog.csdn.net/hao_zong_yin/article/details/72730732 问题描述: 求一个序列中的最长回文串,这个串可以不连续 , 如  { 1 ...