适配器模式(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. BZOJ4735 你的生命已如风中残烛(组合数学)

    将每个位置上的数都-1,则显然相当于前缀和始终非负. 然后就是完全想不到的了.考虑往里面加一张-1的牌.假设在一个合法排列的最后添上一个-1,那么在该排列的所有循环同构排列中,满足前m个前缀和都非负的 ...

  2. Codeforces VK Cup 2015 A.And Yet Another Bracket Sequence(后缀数组+平衡树+字符串)

    这题做得比较复杂..应该有更好的做法 题目大意: 有一个括号序列,可以对其进行两种操作: ·        向里面加一个括号,可以在开头,在结尾,在两个括号之间加. ·        对当前括号序列进 ...

  3. 3. 无重复字符的最长子串(O(N))

    给定一个字符串,找出不含有重复字符的 最长子串 的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. 给定  ...

  4. AtCoder Regular Contest 103 题解

    C-/\/\/\ #include<algorithm> #include<iostream> #include<cstdlib> #include<ioma ...

  5. [洛谷P4248][AHOI2013]差异

    题目大意:给一个长度为$n$的字符串,求: $$\sum\limits_{1\leqslant i<j\leqslant n}|suf_i|+|suf_j|-2\times lcp(suf_i, ...

  6. axios请求,拦截器的使用

    1. axios 创建请求 import axios from 'axios' import {Message} from 'element-ui' import router from " ...

  7. POJ1006:Biorhythms——题解

    http://poj.org/problem?id=1006 题目大意: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这 ...

  8. BZOJ3673 & BZOJ3674 & 洛谷3402:可持久化并查集——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3673 https://www.lydsy.com/JudgeOnline/problem.php? ...

  9. [LOJ 6004] 圆桌聚餐

    link 其实网络流就是再考你如何去建边. 先见$S$,$T$为源点与汇点,然后将$S$连向每一个单位,流量为每个单位的人数,然后将每一个单位连向每一个餐桌,流量为$1$,最后在将每一个餐桌与$T$相 ...

  10. X day2

    题目 官方题解 T1: 我们可以把问题化简为$a\times b \times c \leq n $中的有序$(a,b,c)$有多少组.分三种情况考虑 当$a=b=c$时,答案十分好统计 当$a< ...