一句话描述:不改变原来的代码,也能兼容现在的需求。
package com.gupaoedu.adapter;
/**
* ClassName:ResultMsg
* PackageName:com.gupaoedu.adapter
* Description:
*
* @date:2020/7/20 21:14
* @author:robin
*/
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;
}
@Override
public String toString() {
return "ResultMsg{" +
"code='" + code + '\'' +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
package com.gupaoedu.adapter;
/**
* ClassName:Member
* PackageName:com.gupaoedu.adapter
* Description:
*登录类
* @date:2020/7/20 21:26
* @author:robin
*/
public class Member {
private String username;
private String password;
private String mid;
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;
}
private String info;
}
package com.gupaoedu.adapter;
/**
* ClassName:SigninService
* PackageName:com.gupaoedu.adapter
* Description:
*假如这是运行很多年的稳定的注册与登录方法,我们不能改原代码,又要实现用qq、微信、手机号登录,怎么实现
* 这个时候我们就可以考虑使用适配器模式。
* @date:2020/7/20 21:13
* @author:robin
*/
public class SigninService {
//注册方法
public ResultMsg regist(String username,String password){
return new ResultMsg("200","注册成功",new Member());
}
//登录方法
public ResultMsg login(String username,String password){
return new ResultMsg("200","登录成功",new Member());
}
}
package com.gupaoedu.adapter;
/**
* ClassName:SigninForThirdService
* PackageName:com.gupaoedu.adapter
* Description:
*
* @date:2020/7/20 21:29
* @author:robin
*/
public class SigninForThirdService extends SigninService{
public ResultMsg loginForQQ(String openid){
//适配器无缝对接
//1.认为openid全局唯一,我们可以把它当做用户名
//2.密码默认为 null; 或者为QQ_EMPTY
//3.注册:在原有系统里创建一个用户
ResultMsg msg = super.regist(openid, null);
//4.调用原来的登录方法。
msg = super.login(openid, null);
return msg;
}
public ResultMsg loginForWechat(String openid){
return null;
}
public ResultMsg loginForToken(String token){
return null;
}
public ResultMsg loginForTelphone(String telphone,String code){
return null;
}
public ResultMsg loginForRegist(String username,String password){
return null;
}
}
package com.gupaoedu.adapter;
/**
* ClassName:SigninForThirdServiceTest
* PackageName:com.gupaoedu.adapter
* Description:
*
* @date:2020/7/20 21:35
* @author:robin
*/
public class SigninForThirdServiceTest {
public static void main(String[] args) {
SigninForThirdService service=new SigninForThirdService();
// service.login("",""); 原方法还在
ResultMsg msg = service.loginForQQ("qwert123456");//openid由腾讯提供
if("200".equals(msg.getCode()) && "登录成功".equals(msg.getMsg()) ){
System.out.println("qq登录成功");
}else {
System.out.println("qq登录失败");
}
/**
* qq登录成功
*
* Process finished with exit code 0
*/
}
}
转换流是适配器模式
package com.bjpowernode.demo03;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
/**
* 转换流
* InputStreamReader/OutputStreamWriter
* 当读写的文本文件编码格式与当前环境的编码格式不一样时, 就使用转换流
*
* 这两个类采用了 适配器设计模式
* @author Administrator
*
*/
public class Test03 {
public static void main(String[] args) throws IOException {
// readFile();
writeFile();
}
//把文本写到d:/hehe.txt文件中, 要求文件使用GBK编码, 当前环境使用UTF-8
private static void writeFile() throws IOException {
OutputStream out = new FileOutputStream("d:/hehe.txt");
//以GBK编码把字符转换为字节流,输出到out中
OutputStreamWriter osw = new OutputStreamWriter(out, "GBK");
osw.write("hello");
osw.write("\r\n");
osw.write("也可以写中文的字符串, 文件的编码是GBK格式");
osw.close();
}
// 读取d:/out.txt文件, 该文件使用GBK编码, 当前环境使用UTF-8编码
private static void readFile() throws IOException {
InputStream in = new FileInputStream("d:/out.txt");
//以GBK编码把 字节流in中的字节转换为字符
InputStreamReader isr = new InputStreamReader(in, "GBK");
int cc = isr.read();
while( cc != -1){
System.out.print((char)cc);
cc = isr.read();
}
isr.close();
}
}