2020/3/24学习笔记-day25

java-day25

接口的意义

例如我们可以在完成功能之前,在接口中可以提前先定义出完成功能要使用到的相关方法,这里的方法都是抽象方法,也就是只有方法的声明, 没有方法的实现。同时接口也可以帮我们在一定程度上解决,类和类之间单继承的束缚,因为接口可以被多现实。在学习编程的过程中,我们会遇到很多规范、标准,在java中大多的规范、标准都是以接口的方式进行体现,因为类实现接口后,类中一定是有接口里面所声明的方法的实现,只有我们实现规范、标准中所提供的接口,那么我们的类中也一定会要这些方法,这时候我们的类其实也就是在按照这些规范、标准要的方式进行编写。

接口案例

实现用户登录以及用户权限操作的简单接口案例

SecuritySystem接口

public interface SecuritySystem{
​
    //验证通过后,返回当前登录的这个用户
    public User verifyLogin(String name,String password);
    //验证指定用户是否有权限完成指定操作
    public boolean verifyPemission(User user,String op);
    //完成用户执行的操作
    public void operation(String op);
​
}

User类

class User{
    private String name;   //用户名
    private String password;  //密码
    private String[] allowOps;  //操作
​
    public User(String name,String password,String... op){
        this.name = name;
        this.password = password;
        this.allowOps = op;
    }
​
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name = name;
    }
​
    public String getPassword(){
        return this.password;
    }
    public void setPassword(String password){
        this.password = password;
    }
    
    public String[] getAllowOps(){
        return this.allowOps;
    }
    public void setAllowOps(String[]  allowOps){
        this.allowOps = allowOps;
    }
​
}

ZZbSecuritySystem implements SecuritySystem

class ZZbSecuritySystem implements SecuritySystem {
    //系统中的用户数组,代替将来的数据库db
    private User[] db;
​
​
    public ZZbSecuritySystem(User... user){  //构造方法,给属性赋值
        this.db = user;
    }
​
    //验证通过后,返回当前登录的这个用户,验证失败返回null
    public User verifyLogin(String username,String password){
        //查看数据库中的每一个user
        //对比user用户名和密码,是否和输入的相等
        for(int i=0;i<db.length;i++){
            User u = db[i];
            if(u.getName().equals(username) 
               && u.getPassword().equals(password)){
                return u;
            }
        }
        return null;
    }
​
​
    //验证指定用户是否有权限完成指定操作
    public boolean verifyPemission(User user,String op){
        String[] allow = user.getAllowOps();
        for(int i=0;i<allow.length;i++){
            String str = allow[i];
            if(str.equals(op)){
                return true;
            }
        }
        return false;
    }
​
​
    //完成用户执行的操作
    public void operation(String op){
        System.out.println("\t已完成指定操作:"+op);
    }
}

DefaultSecuritySystem implements SecuritySystem

class DefaultSecuritySystem implements SecuritySystem{
    //验证通过后,返回当前登录的这个用户
    public User verifyLogin(String name,String password){
        return new User(name,password);
    }
    //验证指定用户是否有权限完成指定操作
    public boolean verifyPemission(User user,String op){
        return true;
    }
    //完成用户执行的操作
    public void operation(String op){
        System.out.println("\t已完成指定操作:"+op);
    }
​
}

测试类

class Test{
    public static void main(String[] args){
        SecuritySystem sys = null;
​
        //系统中的内置用户
        User u1 = new User("tom","123","q","w");
        User u2 = new User("jerry","456","e","r");
        User u3 = new User("zzb","zzb","q");
        sys = new ZZbSecuritySystem(u1,u2,u3);
        
        //默认操作
        //sys = new DefaultSecuritySystem();
        
​
        //当前登录系统的用户
        User user = null;
        
        //用来接受用户输入的用户和密码
        String username = null;
        String password = null;
        String op = null;//用户登录成功后执行的操作名称
​
        //读取键盘中的输入
        Scanner sc = new Scanner(System.in);
        
        //用户登录的交互逻辑
        while(true){
            System.out.print("请输入用户名:\t");
            //hasNext():代码在此阻塞等待用户输入
            if(sc.hasNext()){
                username = sc.nextLine();
            }
​
            System.out.print("请输入密码:\t");
            if(sc.hasNext()){
                password = sc.nextLine();
            }
​
            //验证用户输入用户名和密码
            user = sys.verifyLogin(username,password);
​
            if(user!=null){
                System.out.println("登陆成功!\t");
                break;
            }
            //退出
            else if("bye".equals(op)){
                System.out.println(user.getName()+"退出,欢迎再次使用!");
                break;
            }else{
                System.out.println("登陆失败!请检查用户名或密码");
            }
        }
        
        
​
        //用户执行的操作逻辑
        while(true){
            System.out.print("请输入要执行的操作(bye退出): \t");
            //退出
            if("bye".equals(op)){
                System.out.println(user.getName()+"退出,欢迎再次使用!");
                break;
            }
            else if(sc.hasNext()){
                op = sc.nextLine();
            }
​
            else if(sys.verifyPemission(user,op)){
                sys.operation(op);
            }else{
                System.out.println("权限不够,请重新输入!");
            }
            
        }
        
​
    }
}

测试截图

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章