qiuyadong's Homepage

适配器设计模式


设计模式中行为类模式,适配器设计模式。

适配器模式(adapter)(目的是兼容)

应用场景:老系统运行比较稳定,为了保持其稳定性,不便去再修改原来的代码。但是又要为了兼容新的需求或标准,我们不得不在系统去做一些文章。(向下兼容)

如:我懒的注册,只想用QQ、微信、微博等登录;

登录类(通用的稳定方法)


public class SiginService {

    /**
     * 注册方法
     * @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;
    }

}


扩展的登录类

/**
 *
 * 稳定的方法不去动,直接继承下来
 * Created by Tom on 2018/3/14.
 */
public class SiginForThirdService extends SiginService {

    public ResultMsg loginForQQ(String openId){
        //1、openId是全局唯一,我们可以把它当做是一个用户名(加长)
        //2、密码默认为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 loginForTelphone(String telphone,String code){

        return null;
    }

    public ResultMsg loginForRegist(String username,String password){
        super.regist(username,null);
        return super.login(username,null);
    }







}

测试

public class SiginForThirdServiceTest {

    public static void main(String[] args) {

        SiginForThirdService service = new SiginForThirdService();

        //不改变原来的代码,也要能够兼容新的需求
        //还可以再加一层策略模式
        service.loginForQQ("sdfgdgfwresdf9123sdf");


    }





Comments