1
resposta

Design Patterns

Olá, eu fiz os cursos de JS já faz um tempo e não me lembro se tinha design patterns, acho que tinha algo de proxy, mas não lembro do padrão observer.

Eu estou estudando na faculdade com Python, mas estou acostumada com JS, achei na internet a respeito, mas a minha dúvida é se quando faz um notify, ele está usando a função update do objeto ou da classe observer.

É uma pergunta meio estranha, mas eu fiquei pensando nisso, de onde ele está puxando a função update ou no outro exemplo o observer(data)?

Sites: https://codepen.io/pawelgrzybek/pen/XaVRyY?editors=1111

https://medium.com/@patrickackerman/the-observer-pattern-with-vanilla-javascript-8f85ea05eaa8

function Model(){
  var self = this;
  this.heading = "Hello";
  //collection of observers 
    this.observers = []; 
  //add to the collection of observers
  this.registerObserver = function(observer){
    self.observers.push(observer);
  }
  //Iterate over observers, calling their update method
  this.notifyAll = function(){
    self.observers.forEach(function(observer){
      observer.update(self);
    })
  }
}

function View(controller){
    this.controller = controller; 
    this.heading = document.getElementById(‘heading’);
    this.heading.addEventListener('click', controller);
    this.update = function(data){
         this.heading.innerText = data.heading;
    }
    this.controller.model.registerObserver(this);
}
class Observable {
  constructor() {
    this.observers = [];
  }

  subscribe(f) {
    this.observers.push(f);
  }

  unsubscribe(f) {
    console.log(f)
    this.observers = this.observers.filter(subscriber => subscriber !== f);
  }

  notify(data) {
    this.observers.forEach(observer => observer(data));
  }
}

//código restante no link...

input.addEventListener('keyup', e => {
  headingsObserver.notify(e.target.value);
});
1 resposta

Olá, Gisele, tudo bem?

Desde já peço desculpas pela demora em obter retorno.

No primeiro exemplo, a função update é invocada no objeto observer específico. No método notifyAll, que notifica todos os observers, há um loop em cada observer e a função update é invocada para cada um deles. Portanto, no exemplo em JavaScript, a função update é chamada no objeto observer.

No segundo exemplo, a função update também é invocada no objeto observer. No método notify, responsável por notificar todos os observers, a função update é invocada para cada observer presente na lista de observers. Portanto, no exemplo em Python, a função update também é chamada no objeto observer.

Resumindo, tanto em JavaScript quanto em Python, a função update é invocada no objeto ou classe observer, dependendo da implementação específica.

Todavia, vale ressaltar que como você postou sua pergunta há algum tempo é possível que a constante evolução da tecnologia impacte na resolução da sua dúvida. Sendo assim, caso queira se aprofundar neste tema e com conteúdos atualizados, recomendo os materiais abaixo:

Espero ter ajudado.

Abraços e bons estudos!