IO实战篇:用户登录 | 带你学《Java语言高级特性》之七十八

简介: 本节将带领读者实战用户登录功能,通过输入指定的用户名和密码简单实现用户登录功能来进一步掌握IO相关的知识和其他基本知识。

上一篇: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));
    }
}

执行结果:

image.png
image.png
image.png

真实业务只实现核心功能,辅助逻辑处理交给代理控制。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:IO实战篇:投票选举 | 带你学《Java语言高级特性》之七十九
更多Java面向对象编程文章查看此处

相关文章
|
3月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
81 2
|
3月前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
85 2
|
3月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
46 0
|
15天前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
1月前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
32 1
|
2月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
67 6
|
2月前
|
缓存 监控 前端开发
Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信
本文探讨了在 Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信。首先介绍了 WebSocket 和 Socket.IO 的基本概念及其优势,接着详细讲解了 Go 语言中 WebSocket 的实现方法,以及二者集成的重要意义和具体步骤。文章还讨论了集成过程中需要注意的问题,如协议兼容性、消息格式、并发处理等,并提供了实时聊天、数据监控和在线协作工具等应用案例,最后提出了性能优化策略,包括数据压缩、缓存策略和连接管理优化。旨在帮助开发者更好地理解并应用这些技术。
83 3
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
3月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
2月前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
59 1