前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重温设计模式 --- 适配器模式

重温设计模式 --- 适配器模式

作者头像
Niuery Diary
发布2023-10-22 16:37:56
1650
发布2023-10-22 16:37:56
举报

引言

适配器模式是一种结构型设计模式,用于将一个类的接口转换成另一个接口,以便于两个不兼容的类之间能够协同工作。适配器模式可以被认为是一个桥梁,它可以连接两个不同的接口,从而使得它们可以进行协同工作。

适配器模式通常在两个不兼容的类之间进行转换,这些类可能具有不同的接口,不同的数据类型或不同的方法签名。适配器模式通过将一个类的接口转换为另一个类的接口来解决这个问题,这样这两个不同的类就可以协同工作了。

适配器模式分为两种类型,类适配器模式和对象适配器模式。

  • 类适配器模式:通过多重继承的方式,将适配者类的接口转换为目标接口。
  • 对象适配器模式:通过组合的方式,将适配者类的接口转换为目标接口。

下面我们使用C#来实现适配器模式。

创建目标接口

代码语言:javascript
复制
// 目标接口
public  interface  ITarget
{
    void Request();
}

创建原有类

代码语言:javascript
复制
// 原有类
public  class  Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("Adaptee.SpecificRequest");
    }
}

类适配器模式

类适配器模式通过继承实现适配器功能,它继承了原有类并实现了新的接口。这样,客户端就可以通过适配器调用原有类的方法。

  1. 创建类适配器
代码语言:javascript
复制
// 类适配器
public  class  Adapter : Adaptee, ITarget
{
    public void Request()
    {
        this.SpecificRequest();
    }
}
  1. 创建客户端
代码语言:javascript
复制
// 客户端代码
public  class  Client
{
    public void DoWork(ITarget target)
    {
        target.Request();
    }
}

可以这样调用:

代码语言:javascript
复制
// 使用类适配器模式
Client client = new Client();

ITarget adapter = new Adapter();

client.DoWork(adapter);

适配器Adapter继承原有类Adaptee,实现了ITarget接口,并在Request方法中调用了基类的SpecificRequest方法,这样客户端就达到了通过适配器调用原有类的方法。

对象适配器模式

对象适配器模式通过组合实现适配器功能,它将原有类的对象作为一个成员变量包含在适配器类中。这样,客户端就可以通过适配器调用原有类的方法。

代码语言:javascript
复制
// 对象适配器
public  class  Adapter : ITarget 
{
    private Adaptee adaptee;
    
    public Adapter(Adaptee adaptee)
    {
        this.adaptee = adaptee;
    }
    
    public void Request() 
    {
        this.adaptee.SpecificRequest();
    }
}
  1. 创建客户端
代码语言:javascript
复制
// 客户端代码
public  class  Client
{
    public void DoWork(ITarget target)
    {
        target.Request();
    }
}

可以这样调用:

代码语言:javascript
复制
Client client = new Client();

Adaptee adaptee = new Adaptee();

ITarget adapter = new Adapter(adaptee);

client.DoWork(adapter);

适配器Adapter实现了ITarget接口,并持有了原有类的对象作为一个成员变量,使用含参构造的方式将原有类对象初始化,在Request方法中调用了原有类的SpecificRequest方法,这样客户端就达到了通过适配器调用原有类的方法。

结论

如果我们需要在现有代码中添加新的功能,而又不能修改原有的代码,那么适配器模式就是一个非常好的解决方案。适配器模式可以将不兼容的接口转换成兼容的接口,从而让不兼容的代码能够协同工作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Niuery Diary 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
    • 创建目标接口
      • 创建原有类
        • 类适配器模式
          • 对象适配器模式
          • 结论
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档