2016-04-07 12 views
0

Ich habe ein Protokoll im System auf meiner Anwendung, die einen Satz von vordefinierten Benutzern wie so hat:Java - Melden Sie sich als Benutzer oder Administrator an? Inheritance

User user = new User("tommy", "tommy", false); 
User user2 = new User("phil2", "phil2", false); 
User user3 = new User("phil", "phil", true); 
Admin admin = new Admin("benji", "benji", true); 

Diese werden dann zu einer Anordnung von Benutzern

userArray.add(user);... 

die die Login() Methode durchläuft und überprüft ihre Anmeldeinformationen beim Versuch, sich anzumelden.

Die Benutzer können sich wie erwartet anmelden, aber Wie kann ich den Administrator-Account anmelden? Beachten Sie, dass der Administrator immer noch ein Benutzer ist, nur ein spezieller Benutzertyp mit einem anderen Menü, wenn er eingeloggt ist. Derzeit wird das Administratorkonto nicht als Benutzer erkannt.

In meiner Klasse User Ich habe dies: Der Admin erbt von Benutzern, da es ein Benutzer:

public class Admin extends User {   
    public Admin(String username, String password, boolean av) { 
     super(username, password,av); 
    } 

LogIn() sieht wie folgt aus:

public void LogIn() { 
    Scanner in = new Scanner(System.in); 
    System.out.println(" Welcome to the system \n Enter your Username and Password to continue \n Username: "); 
    String temp = in.nextLine(); 
    System.out.println(" Password: "); 
    String temp2 = in.nextLine(); 

    //while(LOCount != 3){ 
    for (int i = 0; i < userArray.size(); i++) { 
     if (userArray.get(i).CheckUsername(temp) && userArray.get(i).CheckPassword(temp2)) { 
      // if(userArray.get(i) instanceof User.Admin){ 
      UserMenu(); 

Checkusername() & check () wie gefordert:

public Boolean CheckPassword(String password) {   
    return this.password.equals(password); 
} 

public Boolean CheckUsername(String username) {   
    return this.username.equals(username); 
} 

Ich bin neu mit Vererbung, also jede mögliche Hilfe, die ich g sein würde rateful für, danke!

+2

zeigen Sie Ihren logIn() Code –

+0

Ich werde es jetzt zur Hauptfrage hinzufügen. hinzugefügt – user3620181

+0

Sie Frage ist so seltsam, verwenden Sie JAAS? –

Antwort

0

Sie könnten so etwas tun.

Durch das Verschieben der Anmeldemethode in die Benutzerklasse können Sie die Logik und Eigenschaften abstrakt halten. Durch Überschreiben der Anmeldemethode in der Admin-Klasse können Sie zusätzliche Prüfungen durchführen.

Durch den Aufruf super.login(); hat der Administrator die gleiche Authentifizierungslogik wie ein normaler Benutzer. Wenn Sie zusätzliche Prüfungen mit final boolean isAuthorized = isAllowedToDoThis(); durchführen, können Sie überprüfen, ob der Administrator diese Aktion ausführen darf.

Dasselbe gilt für getMenu();. Da Sie die Implementierung überschreiben, können Sie einfach getMenu(); für ein Objekt aufrufen, und je nach Objekttyp wird entweder das Benutzer- oder das Administratormenü geladen.

Beachten Sie, dass dies nur ein abstrakter Entwurf davon ist, wie Sie dies implementieren können.

+0

Vielen Dank für Ihre Hilfe, Bei der Deklaration Admin Admin = newAdmin ("ben", "ben", wahr); Es erkennt nicht die Admin-Klasse in Benutzer? – user3620181

+0

Wenn ich geholfen habe bitte upvote und akzeptiere meine Antwort. –

+0

Beim Deklarieren von Admin admin = newAdmin ("ben", "ben", wahr); Es erkennt die Admin-Klasse in User nicht? Admin kann nicht zu einem Typ aufgelöst werden, also habe ich versucht, es aus der Benutzerklasse zu importieren, aber wenn ich das tue, heißt das, dass der Importbenutzer nicht aufgelöst werden kann? – user3620181

2

Sie sollten instanceof vermeiden. Sie können dies tun:

public interface Menu { 
    void show();  
} 

public class UserMenu implements Menu { 
    @Override 
    public void show() { 
    //show user menu 
    } 
} 

public class AdminMenu implements Menu { 
    @Override 
    public void show() { 
    //show admin menu 
    } 
} 

public class User { 

    private String username; 
    private String password; 

    public Menu getMenu() { 
    return new UserMenu(); 
    } 

    public boolean authenticate(String username, String pass) { 
     return this.username.equals(username) && this.password.equals(pass); 
    } 
    //getters & setters 
} 

public class Admin extends User { 
    //Constructor 
    @Override 
    public Menu getMenu() { 
    return new AdminMenu(); 
    } 
} 

Und in Ihrem logIn() Methode:

for (int i = 0; i < userArray.size(); i++) { 
    User user = userArray.get(i); 
    if (user.authenticate(username, password)) { 
     user.getMenu().show(); 
     //for look must finish, maybe with break? 
    } 
} 

Hoffe, es hilft.

+0

Dies ist genial, denn es würde sowohl für Konsole und GUI-Anwendungen funktionieren! Mit einigen Hinzufügungen können Sie die gesamte Geschäftslogik, die mit der Menüinteraktion verbunden ist, entweder in den Menüs oder im Benutzermenü verwalten. –

Verwandte Themen