标签:img 缺点 三方 declare 微信登录 inter ima ace void
适配器模式结构图:
示例代码:
// 已有登录类实现
public class PassportService {
public String regist(String userName, String password){
System.out.println("注册成功=============");
return "success";
}
public String loginOld(String userName, String password){
System.out.println("登录成功=============");
return "success";
}
}
// 登录接口
public interface LoginAdapter {
boolean support(Object obj);
String login(String username, String password);
}
// 抽象适配器类(继承已有类,并实现登录接口)
public abstract class AbstractAdapter extends PassportService implements LoginAdapter{
public abstract boolean support(Object obj) ;
public abstract String login(String username, String password) ;
}
// QQ登录,继承抽象适配器类
public class LoginForQQAdapter extends AbstractAdapter {
@Override
public boolean support(Object obj) {
return obj instanceof LoginForQQAdapter;
}
@Override
public String login(String username, String password) {
System.out.println("QQ登录");
if (password == null){
password = "THIRD_PASSWORD";
super.regist(username,password);
System.out.println("QQ号注册成功====");
}
return super.loginOld(username, password);
}
}
// 手机登录,继承抽象适配器类
public class LoginForTelAdapter extends AbstractAdapter {
@Override
public boolean support(Object obj) {
return obj instanceof LoginForTelAdapter;
}
@Override
public String login(String username, String password) {
System.out.println("手机号登录");
return super.loginOld(username, password);
}
}
// 微信登录,继承抽象适配器类
public class LoginForWechatAdapter extends AbstractAdapter {
@Override
public boolean support(Object obj) {
return obj instanceof LoginForWechatAdapter;
}
@Override
public String login(String username, String password) {
System.out.println("微信登录");
if (password == null){
password = "THIRD_PASSWORD";
super.regist(username,password);
System.out.println("微信号注册成功====");
}
return super.loginOld(username, password);
}
}
// 第三方登录接口
public interface PasswordForThird {
String loginForQQ(String openId);
String loginForWechat(String openId);
String loginForTel(String phone, String code);
}
// 第三方登录实现
public class PasswordForThirdAdapter implements PasswordForThird{
@Override
public String loginForQQ(String openId) {
return processLogin(openId, null, LoginForQQAdapter.class);
}
@Override
public String loginForWechat(String openId) {
return processLogin(openId, null, LoginForWechatAdapter.class);
}
@Override
public String loginForTel(String phone, String code) {
return processLogin(phone, null, LoginForTelAdapter.class);
}
// 注意这里,通过多态实现适配器切换选择
private String processLogin(String username, String password, Class<? extends LoginAdapter> clazz) {
String message = "";
try {
LoginAdapter instance = clazz.getDeclaredConstructor().newInstance();
if (instance.support(instance)){
message = instance.login(username, password);
}
} catch (Exception e) {
e.printStackTrace();
}
return message;
}
}
// 测试类
public class AdapterTest {
public static void main(String[] args) {
PasswordForThird adapter = new PasswordForThirdAdapter();
System.out.println(adapter.loginForQQ("lskdjflsdf"));
}
}
总结:适配器分为类适配器,对象适配器和接口适配器三类,上面的结构图为最简单的类适配器结构图,而下面的示例代码为一段登录的综合运用的代码示例,只为理解适配器模式.
优点:提高类的透明性和复用,适配器类和原角色类解偶,提供了程序的扩展性;符合开闭原则;
缺点:增加了系统的复杂性.
标签:img 缺点 三方 declare 微信登录 inter ima ace void
原文地址:https://www.cnblogs.com/wqlken/p/14698031.html