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