适配器模式(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)的适配器。

    /// <summary>
/// 目标的运算接口
/// </summary>
public interface ICalculation
{
double Add(double x, double y);
} /// <summary>
/// 具体的目标运算类
/// </summary>
public class Calculation : ICalculation
{
public double Add(double x, double y)
{
return x + y;
}
} /// <summary>
/// 需要适配的运算类
/// </summary>
public class CalculationAdaptee
{
public int AddMethod(int x, int y)
{
return x + y;
}
} /// <summary>
/// 类适配器
/// </summary>
public class CalculationAdapter : CalculationAdaptee, ICalculation
{
public double Add(double x, double y)
{
int value = base.AddMethod((int)x, (int)y);
return (double)value;
}
}

二、 对象的适配器模式

类图

描述

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

Adaptee,需要适配的类;

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

应用场景

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

    /// <summary>
/// 对象适配器
/// </summary>
public class CalculationAdapter : ICalculation
{
private CalculationAdaptee calculation; public CalculationAdapter(CalculationAdaptee calculation)
{
this.calculation = calculation;
} public double Add(double x, double y)
{
int value = this.calculation.AddMethod((int)x, (int)y);
return (double)value;
}
}

设计模式之笔记--适配器模式(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. P1120 小木棍 [数据加强版](poj 1011)

    题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...

  2. 51nod 1385凑数字(字符串+构造)

    题目大意: 给定一个n,要求找出一个最短的字符串S,使得所有1到n的整数都是S的子序列. 比如n=10,那么S=”1234056789”的时候,是满足条件的.这个时候S的长度是10. 现在给出一个n, ...

  3. 协程简介-异步IO

    协程 1. 协程,又称微线程,纤程.协程是用户自己控制的,CPU根本不知道协程的存在,CPU只认识线程. 2. 线程切换的时候,会保存在CPU的寄存器里面. 协程切换的时候,却都是由用户自己的实现的. ...

  4. 【题解】SCOI2006萌萌哒

    看到这题,首先想到\(n^{2}\)的暴力,就是用并查集暴力合并两个相等的点.但由于这样会导致反复地访问同一个操作,显然是不能够的.于是我们可以联想这题的特殊性质,就是互相连变的点都是一段一段的区间. ...

  5. BZOJ2427:[HAOI2010]软件安装——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2427 https://www.luogu.org/problemnew/show/P2515 现在 ...

  6. HDU5726:GCD——题解

    题目:hdu的5726 (我原博客的东西,正好整理过来,属于st表裸题) (可以看出我当时有多么的菜--) 这道题写了一遍,然而蒟蒻的我的时间爆炸了-- 于是看了一下学长的代码(顺便在此处%一下学长) ...

  7. 51NOD 1149:Pi的递推式——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1149 F(x) = 1 (0 <= x < 4) F(x) ...

  8. 我的ACM参赛故事

    从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...

  9. [IOI2007]Miners 矿工配餐

    link 其实就是一个比较简单的$IOI$题.简单$dp$就行,设$5$维$dp$即可 最后在滚动一下,判一下可行性即可. #include<iostream> #include<c ...

  10. Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) A B 水 搜索

    A. Oath of the Night's Watch time limit per test 2 seconds memory limit per test 256 megabytes input ...