专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Java 设计模式之适配器模式(结构型)

@

目录

  • 模式定义
  • 模式角色
  • 模式分析
  • 模式例子
  • 模式分类
  • 模式应用

模式定义

适配器模式(Adapter Pattern):将一个接口转换成客户希望的接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

模式角色

适配器模式包括如下角色

  • Traget(目标抽象类)
  • Adapter(适配器类)
  • Adaptee(适配者类)
  • Client(客户类)

模式分析

适配器模式将目标类和适配者类解耦,引入一个适配器类来重用适配者类,具体的实现是在适配者类的,通过适配器模式,客户端类就不知道适配者类的具体实现了,

典型的类适配器代码:

public class Adapter extends Adaptee implements Target
{
    public void request()
    {
        specificRequest();
    }
}

典型的对象适配器代码:

public class Adapter extends Adaptee implements Target
{
    public void request()
    {
        specificRequest();
    }
}

模式例子

某系统需要提供一个加密模块,将用户信息(如密码等机密信息)加密之后再存储在数据库中,系统已经定义好了数据库操作类。为了提高开发效率,现需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码。使用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方加密方法

本例子来自《设计模式》一书

目标类:

public abstract class DataOperation
{
    private String password;

    public void setPassword(String password)
    {
        this.password=password;
    }

    public String getPassword()
    {
        return this.password;
    }

    public abstract String doEncrypt(int key,String ps);
}

适配者类:

public final class Caesar 
{
    public String doEncrypt(int key,String ps)
    {   
        String es="";
        for(int i=0;i<ps.length();i++)
        {
            char c=ps.charAt(i);
            if(c>='a'&&c<='z')
            {
                c+=key%26;
            if(c>'z') c-=26;
            if(c<'a') c+=26;
            }
            if(c>='A'&&c<='Z')
            {
                c+=key%26;
            if(c>'Z') c-=26;
            if(c<'A') c+=26;
            }
            es+=c;
        }
        return es;
    }
}

适配器类:

public class CipherAdapter extends DataOperation
{
    private Caesar cipher;

    public CipherAdapter()
    {
        cipher=new Caesar();
    }

    public String doEncrypt(int key,String ps)
    {
        return cipher.doEncrypt(key,ps);
    }
}

public class NewCipherAdapter extends DataOperation
{
    private NewCipher cipher;

    public NewCipherAdapter()
    {
        cipher=new NewCipher();
    }

    public String doEncrypt(int key,String ps)
    {
        return cipher.doEncrypt(key,ps);
    }
}

模式分类

适配器模式可以分为默认适配器和双向适配器

默认适配器
在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配者类中的方法,它适用于一个接口不想使用其所有的方法的情况。因此也称为单接口适配器模式。

双向适配器
如果在对象适配器中,在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配者类中的方法,那么这个适配器就是一个双向适配器

模式应用

  • JDBC驱动软件都是一个介于jdbc接口和数据库引擎接口之间的适配器软件。JDBC驱动软件使java程序可以适配各种数据库引擎
  • Spring AOP框架中,对BeforeAdvice、AfterAdvice、ThrowsAdvice三种通知类型借助适配器模式来实现。

文章永久链接:https://tech.souyunku.com/25413

未经允许不得转载:搜云库技术团队 » Java 设计模式之适配器模式(结构型)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们