Interface "Autenticavel":
public abstract interface Autenticavel{
public boolean autentica(int senha);
public void setSenha(int senha);
}
Classe "AutenticacaoUtil": Ignora o atributo "login", fiz para testar algumas coisas.
public class Autenticador{
private String login;
private int senha;
public boolean autentica(int senha){
if(this.senha == senha){
return true;
}
return false;
}
public void setLogin(String login){
this.login = login;
}
public void setSenha(int senha){
this.senha = senha;
}
Classe Cliente:
public class Cliente implements Autenticavel{
private Autenticador autenticador;
public Cliente(String login, int senha){
this.autenticador = new Autenticador();
this.autenticador.setLogin(login);
this.autenticador.setSenha(senha);
}
@Override
public boolean autentica(int senha){
return autenticador.autentica(senha);
}
@Override
public void setSenha(int senha){
autenticador.setSenha(senha);
}
Classe Gerente:
public class Gerente extends Funcionario implements Autenticavel{
private Autenticador autenticador;
public Gerente(String nome, String cpf, double salario, String login, int senha) {
super(nome, cpf, salario);
this.autenticador = new Autenticador();
this.autenticador.setSenha(senha);
this.autenticador.setLogin(login);
}
@Override
public double getBonificacao(){
return super.getSalario();
}
@Override
public boolean autentica(int senha){
return autenticador.autentica(senha);
}
@Override
public void setSenha(int senha){
autenticador.setSenha(senha);
}
Classe Administrador:
public class Administrador extends Funcionario implements Autenticavel{
private Autenticador autenticador;
public Administrador(String nome, String cpf, double salario, String login, int senha) {
super(nome, cpf, salario);
this.autenticador = new Autenticador();
this.autenticador.setSenha(senha);
this.autenticador.setLogin(login);
}
@Override
public double getBonificacao(){
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean autentica(int senha){
return this.autenticador.autentica(senha);
}
@Override
public void setSenha(int senha){
this.autenticador.setSenha(senha);
}
Classe Sistema interno:
public class SistemaInterno{
private int senha = 2222;
public boolean autentica(Autenticavel attcavel){
System.out.println(attcavel.autentica(this.senha));
return attcavel.autentica(this.senha);
}
Classe de testes:
public class Testes{
public static void main(String[] args){
Gerente g1 = new Gerente("Jerônimo", "222.222.222.22", 5000.0, "je", 2222);
Administrador adm1 = new Administrador("João", "444.444.444.44", 5000.0, "jão", 2222);
Cliente cl1 = new Cliente("maria", 4444);
SistemaInterno si = new SistemaInterno();
si.autentica(g1);
si.autentica(adm1);
si.autentica(cl1);
Classe mãe "Funcionario":
public abstract class Funcionario{
private String nome;
private String cpf;
private double salario;
public Funcionario(String nome, String cpf, double salario){
this.nome = nome;
this.cpf = cpf;
this.salario = salario;
// puxarFichaFuncionario();
}
public void puxarFichaFuncionario(){
System.out.println("Ficha de funcionário de " + getNome());
System.out.println("cpf: " + getCpf());
System.out.println("salário atual: " + getSalario());
}
public abstract double getBonificacao();
public String getNome(){
return this.nome;
}
public double getSalario(){
return this.salario;
}
public String getCpf(){
return this.cpf;
}
}