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("權限不夠,請重新輸入!");
            }
            
        }
        
​
    }
}

測試截圖

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