平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系。可是我们如今既想用当中一个类的方法。同一时候也想用另外一个类的方法。有一个解决方法是。改动它们各自的接口。可是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了

适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器

下面举例说明:

类适配器 类图

public class DrawRectangle {//画方

public void drawRectangle(String msg) {

System.out.println("draw Rectangle: " + msg);

}

}

public interface IDrawCircle {//画圆的接口

void drawCircle();

}

/**

* 类适配器 使用对象继承的方式,是静态的定义方式

* @author stone

*

*/

public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能画方又能画圆

@Override

public void drawCircle() {

System.out.println("DrawAdapter4Class: drawCircle");

}

}

对象适配器类图:

/**

* 对象适配器: 使用对象组合的方式,是动态组合的方式。

* 既能画方又能画圆

* @author stone

* DrawAdapter是适配器,DrawRectangle属于adapter,是被适配者,适配器将被适配者和适配目标(DrawCircle)进行适配

*

*/

public class DrawAdapter4Object implements IDrawCircle {//既能画方又能画圆

private DrawRectangle drawRectangle;

public DrawAdapter4Object(DrawRectangle drawRectangle) {

this.drawRectangle = drawRectangle;

}

@Override

public void drawCircle() {

System.out.println("DrawAdapter4Object: drawcircle");

}

public void drawRectangle(String msg) {

drawRectangle.drawRectangle(msg);

}

}

接口适配器

类图

/*

* 接口适配器:接口中有抽象方法,我们仅仅想实现当中的几个。不想所有实现,

* 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法

*/

public interface IDraw {

void drawCircle();

void drawRectangle();

}

/*

* 接口适配器 的默认实现

*/

public class DefaultDrawAdapter implements IDraw {//画方 画圆 皆为空实现

@Override

public void drawCircle() {

}

@Override

public void drawRectangle() {

}

}

public class Test {

public static void main(String[] args) {

//对象适配器

DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());

objAdapter.drawCircle();

objAdapter.drawRectangle(" in DrawAdapter4Object");

System.out.println("--------------");

//类适配器

DrawAdapter4Class clzAdapter = new DrawAdapter4Class();

clzAdapter.drawCircle();

clzAdapter.drawRectangle("in DrawAdapter4Class");

System.out.println("--------------");

//接口适配器

MyDrawAdapter myDrawAdapter = new MyDrawAdapter();

myDrawAdapter.drawCircle();

myDrawAdapter.drawRectangle();

}

static class MyDrawAdapter extends DefaultDrawAdapter {

@Override

public void drawCircle() {

System.out.println("drawCircle in MyDrawAdapter");

}

}

}

打印

DrawAdapter4Object: drawcircle

draw Rectangle: in DrawAdapter4Object

--------------

DrawAdapter4Class: drawCircle

draw Rectangle: in DrawAdapter4Class

--------------

drawCircle in MyDrawAdapter

adapter java_Java 实现适配器(Adapter)模式相关推荐

  1. 设计模式学习笔记——适配器(Adapter)模式

    设计模式学习笔记--适配器(Adapter)模式 @(设计模式)[设计模式, 适配器模式, adapter, 适配器] 设计模式学习笔记适配器Adapter模式 基本介绍 适配器案例 类适配器模式 类 ...

  2. 如何定义适配器adapter类_设计模式22-Adapter(适配器)模式-组件接口适配

    在软件开发过程中,有时候系统的数据和行为都正确,但接口不符合,这时候我们就应该考虑使用适配器模式,适配器的作用即将一个类的接口转换成客户希望的另外一个接口.它使得原本由于接口不兼容而不能一起工作的那些 ...

  3. Adapter(适配器)模式总结

    Adapter(适配器)模式总结 前言 一.适配器模式总结 1.模式意图 2.参与者 3.类适配器结构及效果 4.对象适配器结构及效果 二.对象适配器C语言用例 1.用例背景描述 2.用例结构图 3. ...

  4. Ruby设计模式透析之 —— 适配器(Adapter)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9400153 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...

  5. apollo学习基础之三[适配器adapter学习]

    apollo学习基础之三[适配器adapter学习] 目录 apollo学习基础之三[适配器adapter学习] 1.适配封装设计 2. AdapterManager的设计 3.总结归纳: 我们知道, ...

  6. 设计模式--适配器1模式实现C++

    /********************************* *设计模式--适配器1模式实现 *C++语言 *Author:WangYong *Blog:http://www.cnblogs. ...

  7. 设计模式--适配器(Adapter)模式

    模式定义 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 类图 应用场景 1.当你希望使用某些现有类,但其接口与你的其他代码不兼容时: 2 ...

  8. java设计模式adapter_Java设计模式--适配器(Adapter)模式

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

  9. 适配接口 java_【Java 设计模式】接口型模式--Adapter(适配器)模式

    简介:[Java设计模式]接口型模式–Adapter(适配器)模式Adapter模式的宗旨就是:向客户提供接口,并使用现有的类所提供的服务,以满足客户的需求. 或者说,现在有classA的方法满足客户 ...

  10. C++之适配器(Adapter)模式

    0. 简介 适配器模式是一种结构型设计模式, 它能将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper). 根据适配器类与适配者类的关系不同,适配器模 ...

最新文章

  1. Dockerfile的详解
  2. Win 11大更新:可安装超千款Android应用
  3. java构建大根堆_构建大根堆
  4. sql limit 子句_SQL按子句排序
  5. usb audio知识点
  6. 【bzoj3450】Tyvj1952 Easy 期望dp
  7. PHP中的数组(指针)
  8. MySQL(17)-----数值函数
  9. 手推SVM(二)-核方法
  10. 云队友丨华为选拔人才,最看重这5个素质,已经用了15年
  11. 【NOIP practice】BSOJ 3132 卡扎菲 并查集
  12. 这条国道堪称“中国人的景观大道”,而且只许中国人走完全程
  13. [数学学习笔记]函数的连续性
  14. b标签、Strong标签、h1标签的区别以及使用
  15. Python中的对象赋值和浅拷贝,深拷贝
  16. 华为自带浏览器无法使用
  17. 皮革行业经销商在线系统:简化采购审批流程,轻松管控代理商
  18. label 中的for属性有什么用
  19. 如何使用hbuilder快速生成一个直接打开网站的app
  20. 【开源技术分享】无需流媒体服务,让浏览器直接播放rtsp/rtmp的神器:EasyMedia

热门文章

  1. 素士科技IPO折戟,困于营销和小米
  2. 图像处理之超像素分割(SLIC)
  3. 在shell脚本执行hbase命令
  4. Linux Mint 安装网易云音乐
  5. MySQL2:代码小节和代码测试
  6. pythonffmpeg 推流_ffmpeg推流和播放命令
  7. Composition API 使用
  8. Linux内核编译 —— 配置文件
  9. Win11软件兼容性怎么样?
  10. Java数据库课程设计-招聘人才管理系统