A função do padrão do mediador é desconectar a relação de acoplamento apertada entre objetos, que também é chamado de "mediador". Todos os objetos se comunicam através do objeto intermediário, em vez de se referir um ao outro; portanto, quando um objeto muda, você só precisa notificar o intermediário.
Por exemplo: a torre de comando do aeroporto, cada aeronave só precisa se comunicar com a torre de comando. A Torre de Comando conhece o status de voo de cada aeronave, pode organizar todos os horários de decolagem e pouso, ajustar rotas, etc.
O modelo intermediário está em conformidade com a lei dimitiana, ou seja, o princípio do menor conhecimento, o que significa que um objeto deve saber o mínimo possível sobre outro objeto. Se o acoplamento entre os objetos for muito alto, alterar um objeto afetará muitos objetos e é difícil de manter. Quando o acoplamento do objeto é apertado, é difícil modificar um objeto sem afetar os outros objetos.
Se o acoplamento complexo entre objetos causar dificuldades em chamar e manter, e esses graus de acoplamento crescem exponencialmente com as mudanças no projeto, podemos considerar refatorar o código com o padrão intermediário! Os mediadores melhoram a manutenção do código através da dissociação.
Exemplo 1: jogo
O objeto de jogador é criado através do construtor Player () e possui seus próprios pontos e atributos de nome. O método play () no protótipo é responsável por adicionar um ponto a si mesmo e notificar o intermediário:
função player (nome) {this.points = 0; this.name = name;} player.prototype.play = function () {this.points += 1; mediator.played ();};O objeto Scoreboard (placar) possui um método update (), chamado pelo intermediário depois que cada jogador terminar de jogar. A análise não conhece nenhuma informação sobre o jogador, nem economiza pontuações. É responsável apenas por exibir as pontuações dadas pelo intermediário:
var scoreboard = {elemento: document.getElementById ('resultados'), atualização: function (score) {var i, msg = ''; para (i em pontuação) {if (score.hasownProperty (i)) {msg + = '<p> <strong>' + i + '<// Strong>:'; msg += pontuação [i]; msg += '<// p>'; }} this.element.innerhtml = msg; }};Agora vamos dar uma olhada no objeto mediador (mediador). Quando o jogo for inicializado, crie o Método Player no Método Setup () e, em seguida, coloque o atributo do jogador para uso subsequente. O método reproduzido () será chamado pelo jogador após cada rodada. Ele atualiza a tabela de hash de pontuação e depois a passa para o placar para exibição. O último método é KeyPress (), que lida com eventos de teclado, decide qual jogador o joga e notifica:
var mediator = {players: {}, setup: function () {var players = this.players; players.home = novo jogador ('casa'); Players.Guest = New Player ('Guest'); }, reproduzido: function () {var players = this.players, score = {home: players.home.points, hóspedes: toca.guest.points}; scoreboard.update (pontuação); }, keypress: function (e) {e = e || Window.Event; // ie if (e.which === 49) {// key "1" mediator.players.home.play (); retornar; } if (e.which === 48) {// key "0" mediator.players.guest.play (); retornar; }}};A última coisa é inicializar e terminar o jogo:
// vá! mediator.setup (); window.onkeypress = mediator.keypress; // jogo em 30 SecondSetTimeout (function () {window.onkeypress = null; alert ('jogo over!');}, 30000);Exemplo 2: vender um telefone celular
var bens = {// Inventário 'vermelho | 32g': 3, 'vermelho | 16g': 5, 'azul | 32g': 3, 'azul | 16g': 6} // intermediador var mediator = (function () {function id (id) {return document.getElementBy (id);} var de forma lenta id ('numberInput'), colorInfo = id ('colorinfo'), memóriaInfo = id ('MemoryInfo'), numberInfo = id ('numberInfo'), nextbtn = id ('nextbtn'); bens [cor+''+memória]; NumberInfo.innerhtml = Número; nextbtn.disables = true; mediator.changed (this);} numberInput.Onnchange = function () {mediator.changed (this);}REFERÊNCIAS: "Javascript Pattern" "JavaScript Design Pattern and Development Practice"
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.