结构型模式概述
结构型模式分为 类结构模式 和 对象结构模式
类结构模式只关心类的组合,有多个类可以组成一个更大的系统。在类结构模式中一般只存在 继承关系 和 实现关系。
对象结构模式只关心类与对象的组合,通过关联关系是得在一个类中定义另一个类的实例通对象,然后通过该实例变量调用其方法。根据“合成复用原则”, 在系统中尽量使用关联关系来代替继承关系,所以 对象结构模式 用的比较多。
适配器模式
模式动机:
通常情况下,客户端可以通过目标类的借口访问它所提供的服务。有时候,现有类可以满足用户的需求,但是它所提供的借口不一定是用户所希望的,这可能是现有类的方法名和目标类的方法名不一致。所以这时候就可以使用适配器模式,把现有的接口转化成客户类所期望的借口,这就是适配器模式的模式动机。
模式结构:
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之间都需要相应的适配器软件,这就是为各个不同数据库引擎准备的驱动程序。