做一个小登录接口方法,让用户传入用户名,密码,就可以知道登录的结果信息,并以接口监听的方式控制。
先看客户端执行效果:
输入正确:
输入错误:
模拟客户端使用登录小框架:
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