做一个小登录接口方法,让用户传入用户名,密码,就可以知道登录的结果信息,并以接口监听的方式控制。


先看客户端执行效果:
输入正确:
这里写图片描述

输入错误:
这里写图片描述

模拟客户端使用登录小框架

package com.demo1.client;

import java.util.Scanner;

import com.demo1.login.Login;
import com.demo1.login.LoginInfo;
import com.demo1.login.LoginState;

/**
 * 模拟客户端程序
 * @author Liudeli
 */
public class Client {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入用户名  input userName...");
        String userName = scanner.nextLine();

        System.out.println("请输入密码  input userPwd...");
        String userPwd = scanner.nextLine();

        Login.getInstance()
        .setUserName(userName) // 设置用户名
        .setUserPwd(userPwd) // // 设置密码
        .setOnLoginState(new LoginState() { // 登录状态

            public void onLoginSuccess(int loginState) {
                System.out.println("登录成功 login success ! " + loginState); 
            }
            public void onLoginFail(int loginState) {
                System.out.println("登录失败 login fail ! " + loginState);
            }
        })
        .setOnLoginInfo(new LoginInfo() { // 登录的信息

            public void onLoginUserInfo(String userName, String userPwd, String loginTime) {
                System.out.println("登录具体信息  userName:" + userName + 
                " userPwd:" + userPwd + " loginTime:" + loginTime);
            }
        })
        .doLoginCommit();// 最后提交登录命令即可
    }
}

Login的具体实现:

package com.demo1.db;

/**
 * 此类用于模拟数据表(Database)
 * @author Liudeli
 */
public class UserDB {

    /**
     *  模拟用户输入的用户名(本来应该存入数据库中)
     */
    public static final String USER_NAME = "liudeli";

    /**
     * 模拟用户输入的密码(本来应该存入数据库中)
     */
    public static final String USER_PWD = "123";

}
package com.demo1.login;

/**
 * 此接口为登录信息接口
 * @author Liudeli
 */
public interface LoginInfo {

    /**
     * 次方法为登录信息的方法
     * @param userName  用户名称
     * @param userPwd   用户密码 
     * @param loginTime 登录时间
     */
    public void onLoginUserInfo(String userName, String userPwd, String loginTime);

}
package com.demo1.login;

/**
 * 此接口为登录状态接口
 * @author Liudeli
 */
public interface LoginState {

    /**
     * 登录成功
     * @param loginState 传入登录状态
     */
    public void onLoginSuccess(int loginState);

    /**
     * 登录失败
     * @param loginState 传入登陆状态
     */
    public void onLoginFail(int loginState);

}
package com.demo1.login;

/**
 * 定义登陆接口标准
 * @author Liudeli
 */
public interface ILogin {

    /**
     * 设置用户名
     * @param userName
     * @return 返回当前对象
     */
    public Login setUserName(String userName);

    /**
     * 设置用户密码
     * @param userPwd
     * @return 返回当前对象
     */
    public Login setUserPwd(String userPwd);

    /**
     * 设置登录状态
     * @param loginState 传入登录状态的实现
     * @return 返回当前对象
     */
    public Login setOnLoginState(LoginState loginState);

    /**
     * 设置登录信息
     * @param loginInfo 传入登录信息的实现
     * @return 返回当前对象
     */
    public Login setOnLoginInfo(LoginInfo loginInfo);


    /**
     * 做最后登录的提交操作(必须为最后调用)
     */
    public void doLoginCommit();

}
package com.demo1.login;

import com.demo1.db.UserDB;

/**
 * 具体登录业务实现类
 * @author Liudeli
 */
public class Login implements ILogin{

    public static Login login = null;

    public static Login getInstance() {
        if (null == login) {
            synchronized (Login.class) {
                login = new Login();
            }
        }
        return login;
    }

    private String userName;
    private String userPwd;

    public Login setUserName(String userName) {
        this.userName = userName;
        return this;
    }

    public Login setUserPwd(String userPwd) {
        this.userPwd = userPwd;
        return this;
    }

    private LoginState loginState;
    private LoginInfo loginInfo;

    public Login setOnLoginState(LoginState loginState) {
        this.loginState = loginState;
        return this;
    }

    public Login setOnLoginInfo(LoginInfo loginInfo) {
        this.loginInfo = loginInfo;
        return this;
    }

    /**
     * 具体登录业务
     */
    public void doLoginCommit() {

        if (UserDB.USER_NAME.equals(userName) && UserDB.USER_PWD.equals(userPwd)) {
            loginState.onLoginSuccess(1);
        } else {
            loginState.onLoginFail(0);
        }
        setOnLoginState(loginState);

        loginInfo.onLoginUserInfo(userName, userPwd, "2016年12月22日 16:26:10");
        setOnLoginInfo(loginInfo);
    }

}

Project结构:
这里写图片描述


以上其实就是使用了一下接口的知识完成一下回调工作,只需在客户端调用Login对象即可。


谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006