设计模式之笔记--适配器模式(Adapter)

适配器模式(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;
        }
    }
原文地址:https://www.cnblogs.com/zhou-yi/p/5360598.html