目的: 是接口不兼容的类可以一起工作,讲一个类的接口转换为另一个客户期望的接口
public class LoginService {
//为了便于理解,我们忽略账号注册功能,只考虑登录功能
public void login(String userName,String password){
System.out.println("登录成功,欢迎您" + userName);
}
}
支持手机登录
public class LoginByTelephone extends LoginService {
@Override
public void login(String userName, String password) {
super.login(userName, password);
}
public void loginByTelephone(String telephone){
//处理业务逻辑,如注册,存储手机号校验验证码等
//为了兼容之前的账号密码登录,可以初始化与一个固定一个账号,并设置密码
System.out.println("--------手机登录--------");
this.login(telephone,"设置好的密码");
}
}
支持微信登录
public class LoginByWechat extends LoginService {
@Override
public void login(String userName, String password) {
super.login(userName, password);
}
public void loginByWechat(String openid){
//处理业务逻辑,如注册,存储微信账号信息等
//为了兼容之前的账号密码登录,可以初始化与一个固定一个账号,并设置密码
System.out.println("--------微信登录--------");
this.login(openid,"设置好的密码");
}
public class TestLoginAdapter {
public static void main(String[] args) {
LoginByTelephone loginByTelephone = new LoginByTelephone();//手机登录适配器
loginByTelephone.loginByTelephone("131xxxxxxxx");
LoginByWechat loginByWechat = new LoginByWechat();
loginByWechat.loginByWechat("微信openid");//微信登录适配器
}
}
}
优点:
提高类的透明度和复用,现有的类不需要改变
提高扩展性
拓展功能通过新建类实现,不要改变源码
缺点
违背合成复用
代码凌乱,不易阅读