结构型开发模式-适配器模式

结构型模式概述

    结构型模式分为 类结构模式 对象结构模式

  类结构模式只关心类的组合,有多个类可以组成一个更大的系统。在类结构模式中一般只存在 继承关系 和 实现关系。

对象结构模式只关心类与对象的组合,通过关联关系是得在一个类中定义另一个类的实例通对象,然后通过该实例变量调用其方法。根据“合成复用原则”, 在系统中尽量使用关联关系来代替继承关系,所以 对象结构模式 用的比较多。

适配器模式

模式动机:

   通常情况下,客户端可以通过目标类的借口访问它所提供的服务。有时候,现有类可以满足用户的需求,但是它所提供的借口不一定是用户所希望的,这可能是现有类的方法名和目标类的方法名不一致。所以这时候就可以使用适配器模式,把现有的接口转化成客户类所期望的借口,这就是适配器模式的模式动机。

模式结构:

Target:目标抽象类

Adapter: 适配器类

Adapted: 适配者类

Client: 客户类

适配器模式实例与解析

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


目标抽象类

public abstract class DataOperation{

        public String password;

        public void setPassword(String password){

              this.password = password;

       }

        public String getPassword {

               return password;

       }

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

}



数据加密类

public final class Casear{

public String doEncrypt(int key, String password){

        String es = "";

for(int i=0;i='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);

}

}

常见的模式应用

Sun公司在1996年公开了Java语言的数据库连接工具JDBC,JDBC使得Java语言程序能够与数据库连接,并使用SQL语言来查询和操作数据。JDBC给出一个客户端通用的抽象接口,每一个具体数据库引擎(如SQL Server、Oracle、MySQL等)的JDBC驱动软件都是一个介于JDBC接口和数据库引擎接口之间的适配器软件。抽象的JDBC接口和各个数据库引擎API之间都需要相应的适配器软件,这就是为各个不同数据库引擎准备的驱动程序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,645评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,984评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 9,273评论 0 11
  • 1 场景问题# 1.1 装配电脑的例子## 旧的硬盘和电源 小李有一台老的台式电脑,硬盘实在是太小了,仅仅40GB...
    七寸知架构阅读 8,543评论 5 60
  • 有一种爱叫放手,前两天孩子学校组织公益活动,孩子要买些东西带到学校去,然后他问我要了钱,自己下去买,结果买的东西既...
    荣涵阅读 851评论 1 1