Java学习已经有一阵了,咱们也应该真刀真枪干一波试试。我们考虑做一个系统登录认证,就是输入用户名和密码,程序返回是否验证通过的结果。
咱们来分析一下这个程序,首先我们通过界面输入帐号密码,程序接收到这两个参数,然后判断是否验证通过,通过则返回 “XXX,您好!”,不通过则返回“对不起,您的帐号或密码输入有误!”
public class LoginDemo {
public static void main(String[] args) {
if(args.length!=2){
System.out.println("输入参数有误!");
System.out.println("格式:用户名 密码");
System.exit(1); // 系统退出
}
String name = args[0];
String password = args[1];
if(name.equals("zhangsan") && password.equals("sanzhang")){
System.out.println("您好," + name);
}else{
System.out.println("对不起,帐号或密码输入有误!");
}
}
}
上面的代码确实可以实现这个功能,但是判断用户名密码是否正确这个环节不应该出现在主程序里,参考下图。
主程序可以理解为刷卡的这个人,人(主程序)关心的是结果,只关心是否成功,而来做信息判断的是刷卡器,不是人,因此我们应该将这部分判断的功能抽离出来,作为一个单独的功能模块,也就是一个专门完成验证功能的类。另外,有了专门验证的类,我们还需要一个功能,就是执行把门卡放到刷卡器的这一步,也就是传递信息的类。于是,我们重写上面的代码 如下:
class Check{ // 输出判断结果的类
public boolean validate(String name, String password){
if(name.equals("zhangsan") && password.equals("sanzhang")){
return true;
}else{
return false;
}
}
}
class Operate{ // 调用具体验证的操作类,这个类的作用就是相当于拿卡(获取用户信息)去刷(验证)
private String info[]; // 接收全部参数
public Operate(String info[]){
this.info = info;
}
public String login(){
Check check = new Check(); // 实例化 Check 对象
this.isExit(); // 判断传入参数是否准确
String str = null;
String name = info[0];
String password = info[1];
if(check.validate(name, password)){
str = "您好," + name + ", 欢迎光临!";
}else{
str = "对不起,帐号密码错误!";
}
return str;
}
public void isExit(){
if(this.info.length!=2){
System.out.println("输入参数格式不对!");
System.out.println("格式:用户名 密码");
System.exit(1); // 系统退出
}
}
}
public class LoginDemo {
public static void main(String[] args) {
Operate opr = new Operate(args); // 实例化操作类的对象
System.out.println(opr.login()); //
}
}