迭代器设计模式(二) - 早期qq和微信用户登录系统一般写法

前言

迭代器设计模式系列文章
迭代器设计模式(一) - 简介
迭代器设计模式(二) - 早期qq和微信用户登录系统一般写法
迭代器设计模式(三) - 早期qq和微信用户登录系统迭代器设计模式写法
迭代器设计模式(四) - 使用场景
迭代器设计模式(五) - 底部导航栏

1. 实现


实现步骤:
1>:创建用户信息实体对象UserInfo;
2>:创建qq用户系统,采用List集合存储数据;
3>:创建微信用户系统,采用数组存储数据;
4>:定义测试客户端Client进行测试:
a:首先调用qq登录用户信息接口,查询qq用户信息,获取loginUserInfo对象;
b:如果 loginUserInfo对象为null,就调用微信接口查询微信用户信息,获取loginUserInfo对象;
c:如果 loginUserInfo对象也是null,就说明用户名或者密码错误;

具体实现如下:

2. 代码如下


1>:创建用户信息实体对象UserInfo:
/**
 * Email: [email protected]
 * Created by Novate 2018/6/3 11:04
 * Version 1.0
 * Params:
 * Description:    用户信息实体
*/

public class UserInfo {
    public String userName ;
    public String userPwd ;
    public String userId ;
    public String userSex ;

    public UserInfo(String userName, String userPwd, String userId, String userSex) {
        this.userName = userName;
        this.userPwd = userPwd;
        this.userId = userId;
        this.userSex = userSex;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "userName='" + userName + '\'' +
                ", userPwd='" + userPwd + '\'' +
                ", userId='" + userId + '\'' +
                ", userSex='" + userSex + '\'' +
                '}';
    }
}
2>:创建qq用户系统,采用List集合存储数据:
/**
 * Email: [email protected]
 * Created by Novate 2018/6/3 11:09
 * Version 1.0
 * Params:
 * Description:    QQ用户系统 - list集合存储
*/

public class QQUserSystem {
    private List userInfos ;

    public QQUserSystem(){
        userInfos = new ArrayList<>() ;
        userInfos.add(new UserInfo("Novate","123456","001","男")) ;
        userInfos.add(new UserInfo("王子文","234567","002","女")) ;
        userInfos.add(new UserInfo("世道无情","345678","003","男")) ;
    }

    public List getUserInfos(){
        return userInfos ;
    }
}
3>:创建微信用户系统,采用数组存储数据:
/**
 * Email: [email protected]
 * Created by Novate 2018/6/3 11:10
 * Version 1.0
 * Params:
 * Description:    微信的用户系统 - 数组存储
*/

public class WXUserSystem {
    UserInfo[] userInfos ;

    public WXUserSystem(){
        userInfos = new UserInfo[3] ;
        userInfos[0] = new UserInfo("Novate","123456","001","男") ;
        userInfos[1] = new UserInfo("景甜","234567","002","女") ;
        userInfos[2] = new UserInfo("江疏影","345678","003","男") ;
    }

    public UserInfo[] getUserInfos() {
        return userInfos;
    }
}
4>:定义测试客户端Client进行测试:

a:首先调用qq登录用户信息接口,查询qq用户信息,获取loginUserInfo对象;
b:如果 loginUserInfo对象为null,就调用微信接口查询微信用户信息,获取loginUserInfo对象;
c:如果 loginUserInfo对象也是null,就说明用户名或者密码错误;

/**
 * Email: [email protected]
 * Created by Novate 2018/6/3 11:23
 * Version 1.0
 * Params:
 * Description:    一般写法 - 没有采用设计模式之前
*/

public class Client {
    public static void main(String[] args){
        // 根据用户名和密码查询用户信息 ,
        // 如果没有查询到,那么代表登录失败;如果查询到了,代表登录成功
        UserInfo loginUserInfo = queryWXUserInfo("王子文" , "234") ;


        // 如果 loginUserInfo为null,就从QQ系统中查询用户信息
        if (loginUserInfo == null){
            loginUserInfo = queryQQUserInfo("王子文" , "234") ;
        }


        // 现在我只是接入了2个系统,以后我可能需要接入更多的系统,那么如果还是这样写的话,就会产生代码冗余,产生很多重复的代码,
        // 所以这种写法肯定是不可取的,那么接下来我们就来看下采用设计模式是如何写的?


        // 继续判断,如果这个时候 loginUserInfo还是null,表示登录失败,用户名和密码错误
        if (loginUserInfo == null){

        }
    }


    /**
     * 从QQ中查询用户信息
     */
    private static UserInfo queryQQUserInfo(String userName, String userPwd) {
        QQUserSystem qqUserSystem = new QQUserSystem() ;
        List userInfos = qqUserSystem.getUserInfos();
        for (UserInfo userInfo : userInfos) {
            if (userInfo.userName.equals(userName) && userInfo.userPwd.equals(userPwd)){
                return userInfo ;
            }
        }
        return null;
    }


    /**
     * 从微信中查询用户信息
     */
    private static UserInfo queryWXUserInfo(String userName, String userPwd) {
        WXUserSystem wxUserSystem = new WXUserSystem() ;
        UserInfo[] userInfos = wxUserSystem.getUserInfos();
        for (UserInfo userInfo : userInfos) {
            if (userInfo.userName.equals(userName) && userInfo.userPwd.equals(userPwd)){
                return userInfo ;
            }
        }
        return null;
    }
}

3. 一般写法的弊端


在Client测试客户端中,如果有2个用户信息系统,qq和微信,那么就需要调用2个对应的用户信息接口,如果有多个用户信息系统,可能就需要在main()方法中写多个if...else...,这种做法可定是不可取的,那么下一节我们就来看下迭代器设计模式是如何实现的;

你可能感兴趣的:(迭代器设计模式(二) - 早期qq和微信用户登录系统一般写法)