上一篇:IO实战篇:奇偶数统计 | 带你学《Java语言高级特性》之七十七
本节将带领读者实战用户登录功能,通过输入指定的用户名和密码简单实现用户登录功能来进一步掌握IO相关的知识和其他基本知识。
【本节目标】
通过阅读本节内容,你将复习到String一些基础的操作,进一步掌握数据输入的方法,简单了解用户登录功能的基本原理和实现过程,以及程序开发过程中的代理思想。
用户登录
完成系统登录程序,从命令行输入用户名和密码,如果没有输入用户名和密码,则提示输入用户名和密码;如果输入了用户名但是没有输入密码,则提示用户输入密码,然后判断用户名是否是mldn,密码是否是hello,如果正确,则提示登录成功,如果错误,显示登录失败的信息,用户再次输入用户名和密码,连续3次输入错误后系统退出。
对于此时的程序发现可以将用户名和密码同时输入,也可以先输入用户名,而后输入密码,如果超过了3次就表示登录结束了。对于用户名和密码的使用可以采用“用户名/密码”的形式完成,如果发现没有“/”表示没有输入密码。
1、定义用户的操作接口
public interface IUserService {
public boolean isExit();
public boolean login(String name,String password);
}
2、定义操作接口的子类
import cn.mldn.demo.service.IUserService;
public class UserServiceImpl implements IUserService {
private int count = 0; //作为登录统计
@Override
public boolean isExit() {
return this.count >= 3; //执行登录退出的条件
}
@Override
public boolean login(String name, String password) {
this.count ++;
return "mldn".equals(name) && "hello".equals(password);
}
}
3、对于登录失败的检测处理操作,应该单独定义一个用户的代理操作类。
import cn.mldn.demo.service.IUserService;
public class UserServiceProxy implements IUserService {
private IUserService userService ;
public UserServiceProxy(IUserService userService) {
this.userService = userService;
}
@Override
public boolean login(String name, String password) {
while(!this.isExit()) { //不进行退出
String inputData = inputUtil.getString("请输入登录信息:");
if(inputData.contains("/")) { //输入了用户名和密码
String temp [] = inputData.split("/"); //数据拆分
if(this.userService.login(temp[0], temp[1])) { //登录认证
return true; //循环结束了
}else {
System.out.println("登录失败,错误的用户名或密码!");
}
}else { //现在只有用户名
String pwd = inputUtil.getString("请输入密码:");
if(this.userService.login(inputData, pwd)) { //登录认证
return true; //循环结束了
}else {
System.out.println("登录失败,错误的用户名或密码!");
}
}
}
return false;
}
@Override
public boolean isExit() {
return this.userService.isExit();
}
}
4、修改工厂类定义
import cn.mldn.demo.service.IUserService;
import cn.mldn.demo.service.impl.UserServiceImpl;
import cn.mldn.demo.service.proxy.UserServiceProxy;
public class Factory{
private Factory() {}
public static IUserService getInstance() {
return new UserServiceProxy();
}
}
5、定义测试类处理:
public class IOCaseDemo {
public static void main(String[] args) {
System.out.println(Factory.getInstance.login(null, null));
}
}
执行结果:
真实业务只实现核心功能,辅助逻辑处理交给代理控制。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学