适配器模式(Adapter)

定义

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

适配器模式有两种形式:类的适配器模式和对象的适配器模式。

一、类的适配器模式

类图

描述

Target,目标接口,可以是具体的或抽象的类,也可以是接口;

Adaptee,需要适配的类;

Adapter,适配器类,把源接口转换成目标接口;Adapter类实现了Target接口,并继承Adaptee,Adapter类的Request方法重新封装了Adaptee的SpecificRequest方法。

应用场景

在项目A里有一个计算加法的方法double Add(double x, double y);在项目B里也有一个计算加法的方法int AddMethod(int x, int y);现在需要在项目A里使用项目B的求和方法,但是又不能更改项目B的方法,此时就必须有一个能把int AddMethod(int x, int y)转换成double Add(double x, double y)的适配器。

  1. /// <summary>
  2. /// 目标的运算接口
  3. /// </summary>
  4. public interface ICalculation
  5. {
  6. double Add(double x, double y);
  7. }
  8.  
  9. /// <summary>
  10. /// 具体的目标运算类
  11. /// </summary>
  12. public class Calculation : ICalculation
  13. {
  14. public double Add(double x, double y)
  15. {
  16. return x + y;
  17. }
  18. }
  19.  
  20. /// <summary>
  21. /// 需要适配的运算类
  22. /// </summary>
  23. public class CalculationAdaptee
  24. {
  25. public int AddMethod(int x, int y)
  26. {
  27. return x + y;
  28. }
  29. }
  30.  
  31. /// <summary>
  32. /// 类适配器
  33. /// </summary>
  34. public class CalculationAdapter : CalculationAdaptee, ICalculation
  35. {
  36. public double Add(double x, double y)
  37. {
  38. int value = base.AddMethod((int)x, (int)y);
  39. return (double)value;
  40. }
  41. }

二、 对象的适配器模式

类图

描述

Target,目标接口,可以是具体的或抽象的类,也可以是接口;

Adaptee,需要适配的类;

Adapter,适配器类,把源接口转换成目标接口;Adapter类实现了Target接口,并在内部包装一个Adaptee的实例,Adapter类的Request方法重新封装了Adaptee的SpecificRequest方法。

应用场景

同上。把CalculationAdapter类做一下修改:

  1. /// <summary>
  2. /// 对象适配器
  3. /// </summary>
  4. public class CalculationAdapter : ICalculation
  5. {
  6. private CalculationAdaptee calculation;
  7.  
  8. public CalculationAdapter(CalculationAdaptee calculation)
  9. {
  10. this.calculation = calculation;
  11. }
  12.  
  13. public double Add(double x, double y)
  14. {
  15. int value = this.calculation.AddMethod((int)x, (int)y);
  16. return (double)value;
  17. }
  18. }

设计模式之笔记--适配器模式(Adapter)的更多相关文章

  1. 设计模式系列之适配器模式(Adapter Pattern)——不兼容结构的协调

    模式概述 模式定义 模式结构图 模式伪代码 类适配器,双向适配器,缺省适配器 类适配器 双向适配器 缺省适配器 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 主要优点 主要缺点 适 ...

  2. 设计模式 结构型 - 适配器模式 Adapter

    Adapter(适配器模式) ---- 加个“适配器”以便于复用 将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景 如果 ...

  3. 设计模式 笔记 适配器模式 Adapter

    //---------------------------15/04/13---------------------------- //Adapter 适配器模式 ----类对象结构型模式 /* 1: ...

  4. C# 设计模式巩固笔记 - 适配器模式

    前言 多读书.多学习 介绍-适配器模式 定义:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 实现 这里有 ...

  5. IOS设计模式浅析之适配器模式(Adapter)

    引言 在项目开发中,有时候会遇到这样的一种情景:需要使用以前开发的“一些现存的对象”,但是新环境中要求的接口是这些现存对象所不满足的.怎样应对这种迁移的需求?使得可以复用这些对象,以满足新的应用环境, ...

  6. 设计模式学习笔记-Adapter模式

    Adapter模式,就是适配器模式,使两个原本没有关联的类结合一起使用. 平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类 ...

  7. 学习笔记——适配器模式Adapter

    适配器模式适用于将不一致的接口转换为一致的接口. 比如,去香港玩儿,带上了自己的笔记本电脑,结果晚上插电时就抓瞎了,电源插孔与插座不一致.WTF…… 插座是酒店装好的,不可能拆了换一个,电源是自己的, ...

  8. 《JAVA设计模式》之适配器模式(Adapter)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能 ...

  9. 设计模式(五)适配器模式Adapter(结构型)

      设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相 ...

随机推荐

  1. 【bzoj1717】[Usaco2006 Dec]Milk Patterns 产奶的模式 后缀数组+离散化

    题目描述 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个“模式”. John的牛奶按质量可以被赋予一 ...

  2. 【codevs1282】约瑟夫问题 Treap

    题目描述 有编号从1到N的N个小朋友在玩一种出圈的游戏.开始时N个小朋友围成一圈,编号为I+1的小朋友站在编号为I小朋友左边.编号为1的小朋友站在编号为N的小朋友左边.首先编号为1的小朋友开始报数,接 ...

  3. [SOJ #47]集合并卷积

    题目大意:给你两个多项式$A,B$,求多项式$C$使得:$$C_n=\sum\limits_{x|y=n}A_xB_y$$题解:$FWT$,他可以解决形如$C_n=\sum\limits_{x\opl ...

  4. [usaco] 2008 Dec Largetst Fence 最大的围栏 2 || dp

    原网站大概已经上不了了-- 题目大意: 求出平面上n个点组成的一个包含顶点数最多的凸多边形.n<=250. 考虑我们每次枚举凸包的左下角为谁(参考Graham求凸包时的左下角),然后像Graha ...

  5. bzoj1867: [Noi1999]钉子和小球(DP)

    一眼题...输出分数格式才是这题的难点QAQ 学习了分数结构体... #include<iostream> #include<cstring> #include<cstd ...

  6. Django CRM系统

    本节内容 业务痛点分析 项目需求讨论 使用场景分析 表结构设计 业务痛点分析 我2013年刚加入老男孩教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每 ...

  7. redis缓存在项目中的使用

    关于redis为什么能作为缓存这个问题我们就不说了,直接来说一下redis缓存到底如何在项目中使用吧: 1.redis缓存如何在项目中配置? 1.1redis缓存单机版和集群版配置?(redis的客户 ...

  8. Spring Boot 打包部署

    一.打包成jar并部署 1.工程--右键选择运行配置: 在Goals中输入: org.apache.maven.plugins:maven-jar-plugin:.RELEASE:repackage ...

  9. 东方14ACM小组 Challenge 11

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...

  10. [洛谷P2597] [ZJOI2012]灾难

    洛谷题目链接:[ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引 ...