ChrisEvaristo / Padr-o-Observer

0 stars 0 forks source link

Praticando Padrão Observer... #2

Open ChrisEvaristo opened 3 years ago

ChrisEvaristo commented 3 years ago

public interface Carro { public void frente(); public void direita(); public void esquerda(); public void para();

}

public class CarroPolicia implements Observer, Carro {

public void frente(){ System.out.println ("Viatura segue em frente.");

public void direta(){
  System.out.println("Viatura vira a direita.");

  public void esquerda(){
    System.out.println("Viatura vira a esquerda.");

    public void para() {
      System.out.println ("Viatura para.");

      public void update (Observable arg0,Object arg1){
        CarroRoubado carroObservado = (CarroRoubado)arg0;
        String acao = String.valueOf(arg1);

        if(acao.equals ("frente")){
          this.frente ();
        }
        else if (acao.equals("direita")){
            this.direita();

        }

        else if (acao.equals("esquerda")){
          this.esquerda();

        }
        else if (acao.equals("para")){
          this.para();

public class CarroRoubado extends Oobservable implements Carro { private String acao ="";

public void frente() { acao = "frente"; System.out.println ("Carro roubado segue em frente".); this.mudaEstado();

public void direita(){
  acao = "direta";
  System.out.println("Carro roubado vira a direita".);
  this.mudaEstado();

  public void esquerda(){
    acao = "esquerda"
    System.out.println("Carro roubado vira a esquerda.");
    this.mudaEstado();

    public void para(){
      acao = "para"
      System.out.println("Carro roubado para".);
      this.mudaEstado();

    }
  }
  public void mudaEstado(){
    setChanged ();
    notifyObservers(acao);

  }
}

} }

public class MinhaApp {

public static vboid main(String[]args) { // oBSERVADOR CarroPolicia CarroPolicia = new CarroPolicia(); // oBSERVADOR CarroRoubado CarroRoubado = new CarroRoubado();

// ADICIONAR oBSERVADOR AO oBSERVADO CarroRoubado.addObserver(carroPolicia);

CarroRoubado.frente(); CarroRoubado.direita(); CarroRoubado.frente(); CarroRoubado.esquerda(); CarroRoubado.para(); } }

ChrisEvaristo commented 3 years ago

Temos uma interface que chamei de Carro que será implementada tanto para carro da Policia e carro Roubado esses métodos serão implementados pelas classes concretas. Portanto o carro da Policia ele é observador ele tem que implementar a interface Observer e os métodos da interface Carro teremos métodos frente, direita, esquerda, para. Porém temos update que pertence a interface Observer esse método recebe um parâmetro Observable privado e ação desse objeto observado. Então cada vez executa determinada ação e essa ação notifica o observador por sua vez toma uma determinada ação. Na classe CarroRoubado que herda da classe observada e os métodos são os mesmos, porem a cada ação observado precisa notificar o observador. Obs : Os observadores devem conhecer objetos de interesse.