JAVA 设计模式 适配器模式

用途

适配器模式 (Adapter)

将一个类的接口转换成客户希望的另外一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式是一种结构型模式

结构

图-适配器模式结构图

Target : 定义用户实际需要的接口

abstract class Target {
 public abstract void Request();
 }

Adaptee : 定义一个需要适配的接口

class Adaptee {
 public void SpecificRequest() {
         System.out.println("特殊请求");
     }
 }

Adapter : 通过在内部包装一个 Adaptee 对象,把源接口转换成目标接口。

class Adapter extends Target {
 private Adaptee adaptee = new Adaptee();
 
     @Override
 public void Request() {
         adaptee.SpecificRequest();
     }
 }

测试代码

public class AdapterPattern {
 public static void main(String[] args) {
         Target target = new Adapter();
         target.Request();
     }
 }

运行结果

特殊请求

应用场景

想要使用一个已经存在的类,但如果它的方法不满足需求时;

两个类的职责相同或相似,但是具有不同的接口时要使用它;

应该在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同时就使用它。

推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》《HeadFirst设计模式》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

Lucene学习总结之二:Lucene的总体架构

然而通过下图,我们不难发现,Lucene的各源码模块,都是对普通索引和搜索过程的一种实现。

922
来自专栏大内老A

认识ASP.NET MVC的5种AuthorizationFilter

在总体介绍了筛选器及其提供机制(《深入探讨ASP.NET MVC的筛选器》)之后,我们按照执行的先后顺序对四种不同的筛选器进行单独介绍,首先来介绍最先执行的Au...

1876
来自专栏各种机器学习基础算法

ajax中success函数无法改变全局或局部变量的值

在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值。代码如下: fun...

2709
来自专栏JadePeng的技术博客

Angular 快速学习笔记(1) -- 官方示例要点

1385
来自专栏JetpropelledSnake

Django学习笔记之Django Form表单

1064
来自专栏更流畅、简洁的软件开发方式

【自然框架】之数据访问 —— 再小的类库也需要设计。

  以前也写过几篇关于数据访问的,这里是最新的总结。麻雀虽小五脏俱全,数据访问也许不起眼,但是也要好好的设计一翻。从2004年开始用自己的数据访问,一直到现在,...

1889
来自专栏一“技”之长

iOS中表单视图第三方控件——FXForms 原

        表单视图是移动开发中十分常用的一种UI方式。在iOS开发中,系统的UITableView可以用来创建表单视图,其界面的渲染与逻辑的处理需要开发者...

552
来自专栏JadePeng的技术博客

Angular 快速学习笔记(1) -- 官方示例要点

of(HEROES) 会返回一个 Observable,它会发出单个值,这个值就是这些模拟英雄的数组。 d. 订阅Observable

650
来自专栏强仔仔

Spring MVC中常用注解之RequestMapping详解

SpringMVC和Struts2最大区别可能就是注解的使用。因为SpringMVC中可以实现在类这个层面上面配置信息,也可以在方法层面上面配置信息,既灵活又方...

1985
来自专栏大内老A

ASP.NET MVC的Model元数据与Model模板:将”ListControl”引入ASP.NET MVC

我们不仅可以创建相应的模板来根据Model元数据控制种类型的数据在UI界面上的呈现方法,还可以通过一些扩展来控制Model元数据本身。在某些情况下通过这两者的结...

2676

扫码关注云+社区