适配器模式(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. [BZOJ2067]szn

    description BZOJ权限题. solution 一道非常好的二分+贪心题目. 第一问就是\(\frac{\sum_u(deg[u]-1)}{2}+1\). 第二问需要在方案最优的情况下最长 ...

  2. [Leetcode] Binary tree level order traversal ii二叉树层次遍历

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  3. BZOJ3670 [Noi2014]动物园 【KMP计数】

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 3143  Solved: 1690 [Submit][Stat ...

  4. 算法复习——欧拉回路(uoj117)

    题目: 题解: 欧拉回路相关定理(相关定义和证明请参见其他资料): 1.欧拉回路 (1)有向图:所有点的出度都等于入度为该图为欧拉图(存在欧拉回路)的充要条件. (2)无向图:所有点的度都为偶数为该图 ...

  5. poco普通线程

    #include "Poco/Thread.h" #include "Poco/RunnableAdapter.h" #include <iostream ...

  6. Hadoop及Zookeeper+HBase完全分布式集群部署

    Hadoop及HBase集群部署 一. 集群环境 系统版本 虚拟机:内存 16G CPU 双核心 系统: CentOS-7 64位 系统下载地址: http://124.202.164.6/files ...

  7. c#知识梳理

    转:http://www.cnblogs.com/zhouzhou-aspnet/articles/2591596.html 本文是一个菜鸟所写,本文面向的人群就是像我这样的小菜鸟,工作一年也辛辛苦苦 ...

  8. [zz]【整理】Python中Cookie的处理:自动处理Cookie,保存为Cookie文件,从文件载入Cookie

    http://www.crifan.com/python_auto_handle_cookie_and_save_to_from_cookie_file/ #!/usr/bin/python # -* ...

  9. C#学习之泛型准备

    想要把泛型搞明白,最好先弄明白下面的代码实例 本实例是建立了两个类,然后在类中可以添加任意类型的值,并且可以利用foreach语句读出 //第一个节点类,放在一个文件中 using System; u ...

  10. android 布局文件中控件ID、name标签属性的命名包含“@”、“.”、“+”等等符号的含义

    1. 在项目的根目录有个配置文件“AndroidManifest.xml”,是用来设置Activity的属性的如 <?xml version="1.0" encoding=& ...