适配器模式的主要目的就是为了兼容,即不改变原来的代码,也能兼容新的需求。
老系统运行了很久比较稳定,为了保持其稳定性,不便再去修改原来的代码,但是又要为了兼容新的需求 或标准,我们不得不去系统再做些文章。(向下兼容)
使用场景:登录
用户名、密码 验证用户名密码的有效性---》把登录结果保存到session中,--->写入到浏览器cookie
随着互联网技术的发展,用户的需求多样化。我懒得注册,我只想用QQ登录,微信登录,微博登录、手机号+验证码。
Spring中的适配器 类名都是以adapt 结尾的
demo
/**
* @description:稳定的注册和登录方法
**/
@Deprecated
//会在原来的类上加上@Deprecated注解,表示该类是过时的,建议使用新类 SiginForThirdService
public class SignService {
/**
*注册方法
* @param username
* @param password
* @return
*/
public ResultMsg regist(String username, String password){
return new ResultMsg(200,"注册成功", new Member());
}
/**
* 登录方法
* @param username
* @param password
* @return
*/
public ResultMsg login(String username,String password){
return null;
}
}
/**
* @description: 第三方的登录方法,稳定的方法不去动,直接继承下来
**/
public class SiginForThirdService extends SignService {
public ResultMsg loginForQQ(String openId){
//1、openId是全局唯一们可以把他当做用户名
//2、密码默认为QQ_EMPTY
//3、注册(在原有系统里面创建一个用户)
//4、登录(调用原来的登录方法)
ResultMsg loginMsg = super.login(openId, null);
return loginForRegist(openId,null);
}
public ResultMsg loginForWechat(String openId){
return null;
}
public ResultMsg loginForToken(String token){
//通过拿到token 信息再登录一次
return null;
}
public ResultMsg loginForTelphone(String telphone,String code){
return null;
}
public ResultMsg loginForRegist(String username,String password){
ResultMsg registMsg = super.regist(username, null);
return super.login(username, null);
}
}
public class Member {
private String username;
private String password;
private String mid;
private String info;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
public class ResultMsg {
private int code;
private String msg;
private Object data;
public ResultMsg(int code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
public class SiginForThirdServiceTest {
public static void main(String[] args) {
SiginForThirdService service = new SiginForThirdService();
//还可以再加一层策略模式
//适配器的目的,就是不改变原来的代码,也能兼容新的需求
service.loginForQQ("1234sssgfasfda");
}
}