• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

04月
24
C#
设计模式

设计模式-适配器模式

发表于 2022-04-24 • 字数统计 2257 • 被 792 人看爆

定义

适配器模式:将一个类的接口转换成客户希望的另一个接口。
适配器模式让那些接口不兼容的类可以一起工作。

举例

常见的就是电源适配器,生活用电电压是220V,而笔记本电脑、手机等所需电压没有这么高,就需要电源适配器进行转换了

结构

类适配器模式和对象适配器模式

适配器模式结构图.png

  • (1)Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。在类适配器中,由于C#语言不支持多重继承,它只能是接口。
  • (2)Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。适配器Adapter是适配器模式的核心,在类适配器中,它通过实现Target接口并继承Adaptee类来使二者产生联系,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
  • (3)Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下甚至没有适配者类的源代码。

实现

对象适配器

class Target
{
    public virtual void Request()
    {
        Console.WriteLine("普通请求");
    }
}

class Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("特殊请求");
    }
}

/// <summary>
/// 对象适配器
/// </summary>
class Adapter: Target
{
    private Adaptee adaptee = new Adaptee();
    //表面上是调用Request,其实是调用SpecificRequest
    public override void Request()
    {
        adaptee.SpecificRequest();
    }
}


class Program
{
    static void Main(string[] args)
    {
        Target target = new Adapter();
        target.Request();
    }
}

类适配器

interface ITarget
{
    void Request();
}

class Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("特殊请求");
    }
}

// 类适配器
class Adapter : Adaptee,ITarget
{
    
    //表面上是调用Request,其实是调用SpecificRequest
    public void Request()
    {
        base.SpecificRequest();
    }
}

class Program
{
    static void Main(string[] args)
    {
        Adapter adapter = new Adapter();
        adapter.Request();
    }
}

优点

  • (1)将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
  • (2)增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。
  • (3)灵活性和扩展性都非常好

对象适配器优点

  • (1)一个对象适配器可以把多个不同的适配者适配到同一个目标。
  • (2)对象适配器模式可以适配一个适配者的子类

缺点

  • (1)对于C#、Java等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者。
  • (2)适配者类不能为最终类,例如在C#中不能为sealed类。
  • (3)在C#、Java等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。

对象适配器缺点
与类适配器模式相比,要在适配器中置换适配者类的某些方法比较麻烦。

适用环境

  • (1)系统需要使用一些现有的类,而这些类的接口(例如方法名)不符合系统的需要,甚至没有这些类的源代码。
  • (2)创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作。
分享到:
设计模式-桥接模式
设计模式-单例模式
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,080次看爆
  • JAVA_HOME环境配置问题 3,731次看爆
  • AssetBundle使用 3,499次看爆
  • VSCode配置C++开发环境 3,257次看爆
  • Lua反射 3,133次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图