适配器模式
当我们需要一个转换头的时候,可以考虑到适配器模式
现实生活中的适配器(兼容):
VGA-HDMI/充电头/插头转换/编码解码/调制解调器
系统应用场景:
老系统运行了很久比较稳定,为了保证其稳定性,不便再去修改原来的代码,但是又要为了兼容新的需求或者标准,我们不得不在系统中再去做一些文章。(向下兼容)
系统应用场景举例:
登录------
用户名、密码输入 后台验证用户名密码的有效性--> 登录结果保存到session中-->写入到浏览器cookie
随着互联网技术的发展,用户的需求的多样化
登录关联了新的方式:QQ登录,微信登录,手机号登录,微博登录等
原始系统代码很复杂,不想随意去修改原始系统,就可以使用到适配器模式
JAVA中的应用
以Adapter结尾的
HttpWebHandleAdapter
WebSocket
等
登录的适配器示例代码
返回类型的基础代码:
package com.debuggg.test1.main5;
public class ResultMsg {
private String code;
private String msg;
private Object data;
public ResultMsg(String code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public String getCode() {
return code;
}
public void setCode(String 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;
}
}
用户信息:
package com.debuggg.test1.main5;
public class Mmeber {
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;
}
}
原始登录代码:
package com.debuggg.test1.main5;
import com.debuggg.test1.templatemethod.entity.Member;
public class SigninService {
/**
* 作者 ZYL
* 功能描述 : 注册
* 日期 2020-04-13 17:32
* 参数 username
* 参数 password
* 返回值 com.debuggg.test1.main5.ResultMsg
*/
public ResultMsg regist(String username, String password){
return new ResultMsg("200","注册成功",new Member());
}
/**
* 作者 ZYL
* 功能描述 : 登录
* 日期 2020-04-13 17:32
* 参数 username
* 参数 password
* 返回值 com.debuggg.test1.main5.ResultMsg
*/
public ResultMsg login(String username, String password){
return null;
}
}
适配器登录的代码:
package com.debuggg.test1.main5;
/**
* 作者 ZYL
* 功能描述 : 稳定的方法不去动,直接继承下来
* 日期 2020-04-13 17:34
* 参数 null
* 返回值
*/
public class SigninForThirdService extends SigninService {
public ResultMsg loginForQQ(String openId){
//1.认为openId是全局唯一,我们可以把它当做是用户名username
//2.密码默认为null(空的),或者默认值"QQ_EMPTY"
//3.注册(在原有系统创建一个用户)
//4.调用原来的登录方法
return loginForRegist(openId,null);
}
public ResultMsg loginForWechat(String openId){
return null;
}
public ResultMsg loginForToken(String token){
//通过token拿到用户信息,重新登录一次
return null;
}
public ResultMsg loginForTelephone(String phone, String code){
//把手机号设置为用户名,密码设置为空,来操作
return null;
}
public ResultMsg loginForRegist(String username, String password){
super.regist(username, password);
return super.login(username,password);
}
}
测试代码:
package com.debuggg.test1.main5;
/**
* 作者 ZYL
* 功能描述 : 适配器模式
*
* 需要一个转换头的时候,可以考虑到适配器模式
* 现实生活中的适配器(兼容):
* VGA-HDMI/充电头/插头转换/编码解码/调制解调器
*
* 系统应用场景:
* 老系统运行了很久比较稳定,为了保证其稳定性,不便再去修改原来的代码,但是又要为了兼容新的需求或者标准,我们不得不在系统中再去做一些文章。(向下兼容)
*
* 系统应用场景举例:
* 登录------
* 用户名、密码输入 后台验证用户名密码的有效性--> 登录结果保存到session中-->写入到浏览器cookie
* 随着互联网技术的发展,用户的需求的多样化
* 登录关联了新的方式:QQ登录,微信登录,手机号登录,微博登录等
* 原始系统代码很复杂,不想随意去修改原始系统,就可以使用到适配器模式
*
* 日期 2020-04-13 17:23
* 参数 null
* 返回值
*/
public class AdapterTest {
public static void main(String[] args) {
SigninForThirdService service = new SigninForThirdService();
//不改变原来的代码,也要实现新的登录
//还可以再加一层策略模式
service.loginForQQ("thisisopenidxxxxxxx");
}
}
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载