适配器模式-Adapter

名称:

    适配器模式(Adapter Pattern)-类对象结构型模式

    别名:包装器Wrapper

 

问题:

    The Adapter pattern acts as an intermediary between two classes, converting the interface of one class so that it can be used with the other. This enables classes with incompatible interfaces to work together.

    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

 

适用性:

    -你想使用一个已经存在的类,而它的接口不符合你的 需求。

    -你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。

    -你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它的接口。对象适配器可以适配它的父类接口。

 

协作:

     Client在Adapter实例上调用一些操作。接着适配器调用Adaptee的操作实现这个请求。

 

优点和缺点: 

  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
  • 缺点是过多的使用适配器,会让系统非常的凌乱。
  • 单继承,只能适配一种。

    类适配器

    1、用的一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

    2、使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

    3、仅仅引入了一个对象,并不需要额外的指针以间接得到adaptee。

    对象适配器

    1、允许一个Adapeter与多个Adaptee同时工作。Adapter也可以一次给所有的Adaptee添加功能。

    2、使得重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

    

解决方案:

    

1、 模式的参与者

    1、Target

    -定义Client使用的与特定领域相关的接口。

    2、Client

    -与符合Target接口的对象协同。

    3、Adaptee

    -定义一个已经存在的接口,这个接口需要适配。

    4、Adapter

    -对Adaptee的接口与Target接口进行适配。

2.实现方式

interface Target
{
    public void request();
}

 

class Adaptee
{
    public void adaptedRequest()
    {       
        System.out.println("adaptRequest!");
    }
}
class ClassAdapter extends Adaptee implements Target
{
    public void request()
    {
        adaptedRequest();
    }
}
public class ClassAdapterTest
{
    public static void main(String[] args)
    {
        Target target = new ClassAdapter();
        target.request();
    }
}

 

参考资料

《设计模式:可复用面向对象软件的基础》

    

posted @   diameter  阅读(125)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示