Durante nosso processo de desenvolvimento normal, definitivamente encontraremos essa situação: processamos objetos simples e objetos complexos compostos por objetos simples ao mesmo tempo. Esses objetos simples e objetos complexos serão combinados em uma estrutura de árvore, e o cliente deve manter a consistência ao processá -los. Por exemplo, para pedidos de produtos em sites de comércio eletrônico, cada pedido de produto pode ter várias combinações de subordes, como pastas no sistema operacional, cada pasta possui vários sub-oscilantes ou arquivos. Quando copiamos, excluímos -os, etc., seja uma pasta ou um arquivo, é o mesmo para os operadores dos EUA. Nesse cenário, é muito adequado usar o modo de combinação para alcançá -lo.
Conhecimento básico
Modo de combinação: Combinando objetos em uma estrutura de árvore para representar uma hierarquia "total total". O modo de combinação permite que os usuários tenham consistência no uso de objetos individuais e objetos combinados.
Existem três caracteres principais no modo de combinação:
(1) Componente abstrato (componente): Uma classe abstrata que define principalmente a interface pública dos objetos que participam da combinação
(2) Sub-objeto (folha): o objeto mais básico que forma um objeto combinado
(3) Composto: objetos complexos combinados por objetos infantis
A chave para entender o padrão de combinação é entender a consistência do padrão de combinação para objetos individuais e objetos combinados. Vamos falar sobre a implementação de padrões de combinação para aprofundar nosso entendimento.
O modo de combinação é adaptado para criar a interface do usuário dinamicamente na página. Você pode usar apenas uma vida = comando para inicializar algumas operações complexas ou recursivas para muitos objetos. O modo de combinação fornece dois pontos:
(1) Permita que você trate um grupo de objetos como objetos específicos. Um objeto composto implementa a mesma operação que os subobjetos que o fazem. A execução de uma determinada operação em um objeto combinado causará todos os subobjetos nesse objeto para executar a mesma operação. Portanto, você pode não apenas substituir perfeitamente um único objeto em um conjunto de objetos, mas também o mesmo por sua vez. Esses objetos independentes são os chamados acoplados vagamente.
(2) O padrão de combinação combinará o conjunto de subobjetos em uma estrutura de árvore e permitirá a travessia de toda a árvore. Isso ocultará a implementação interna e permitirá que você organize os subobjetos de qualquer maneira. Qualquer código para este objeto (objeto combinado) não dependerá da implementação dos subobjetos internos.
Implementação do modo de combinação
(1) o modo de combinação mais simples
A estrutura DOM dos documentos HTML é uma estrutura de árvore natural. Os elementos mais básicos se tornam árvores de Dom e, eventualmente, formam documentos DOM. É muito adequado para o modo de combinação.
Muitas vezes usamos a biblioteca de classes jQuery, onde o padrão de combinação é aplicado com mais frequência, por exemplo, o código a seguir é frequentemente implementado:
$ (". Teste"). addclass ("notest"). Remover ("teste");Esse código simples é obter o elemento que a classe contém teste e, em seguida, processá -lo com addclass e removeclass. Se $ (". Teste") é um elemento ou vários elementos, ele é chamado através das interfaces AddClass Unified Addclass e removeclass.
Vamos simular brevemente a implementação do AddClass:
var addclass = function (eLes, className) {if (elees instanceof nodelist) {for (var i = 0, comprimento = eLes.length; i <comprimento; i ++) {eles [i] .NodeType ==== 1 && (ELES [i] .classname += ('' +classname +''); }} else if (elees instanceof node) {elees.nodetype === 1 && (ele.className + = ('' + className + '')); } else {throw "ELES não é um nó html"; }} addClass (document.getElementById ("div3"), "teste"); addclass (document.querselectorall (". div"), "teste");Esse código simplesmente simula a implementação do AddClass (compatibilidade e universalidade não são considerados por enquanto) e é simples julgar o tipo de nó primeiro e, em seguida, adicionar o nome da classe de acordo com diferentes tipos. Para o NodeList ou Node, as chamadas do cliente usam a interface AddClass da mesma maneira. Essa é a idéia mais básica do modo de combinação, tornando o uso da parte e o todo consistente.
(2) exemplos típicos
Mencionamos um exemplo típico: uma ordem do produto contém vários subordinados de produto e vários sub-encomendadores de produtos formam uma ordem complexa de produto. Devido às características da linguagem JavaScript, simplificamos os três papéis do padrão de combinação em 2 funções:
(1) SubObject: Neste exemplo, o subobjeto é um subordes de produto
(2) Objeto de combinação: esta é a ordem total do produto
Suponha que desenvolvemos um site de produtos de turismo que contenha dois subprodutos: passagens aéreas e hotéis. Definimos os subobjetos da seguinte forma:
function floworder () {} flightorder.prototyp.create = function () {console.log ("ordem de voo criada");} function hotelorder () {} hotelorder.prototype.create = function () {console.log ("hotel order criado");}O código acima define duas classes: aula de pedidos de ingressos aéreos e aula de pedidos de hotel. Cada classe tem seu próprio método de criação de pedidos.
Em seguida, criamos uma aula de pedidos totais:
função totalorders () {this.orderlist = [];} totalorders.prototype.addorder = function (order) {this.orderList.push (order);} totalorders.prototype.create = function (order) {para (var i = 0 = this.OrderList.List.l; }}Este objeto possui três membros principais: uma lista de pedidos, um método para adicionar um pedido e um método para criar um pedido.
Ao usar o cliente, o seguinte é o seguinte:
Var Flight = New FlightOrder (); Flight.Create (); var Ordens = New Totalordens (); Ordens.Addorder (New Flightorder ()); Ordens.Addorder (New Hotelorder ()); Orders.create ();
As chamadas do cliente mostram duas maneiras, uma é criar pedidos de ingressos aéreos e o outro é criar vários pedidos, mas eles são criados através do método Create. Este é um cenário de aplicação muito típico do modo de combinação.
Resumir
O padrão de combinação não é difícil de entender. Ele resolve principalmente o problema de consistência de objetos únicos e objetos combinados da maneira como são usados. Isso é ótimo para usar padrões combinatórios se os objetos tiverem hierarquias óbvias e desejam usá -las uniformemente. No desenvolvimento da Web, essa hierarquia é muito comum e é muito adequada para o uso de padrões de combinação. Especialmente para o JS, você não precisa se ater à forma de linguagem orientada a objetos tradicional e usar flexibilidade as características da linguagem JS para obter consistência no uso parte e geral.
(1) cenários usando o modo de combinação
Use o modo de combinação ao encontrar as duas situações a seguir
A. Uma coleção de objetos contendo uma certa estrutura hierárquica (a estrutura específica não pode ser determinada durante o processo de desenvolvimento)
B. deseja realizar alguma operação nesses objetos ou em alguns deles
(2) Desvantagens do modo de combinação
Como qualquer operação de um objeto combinado chamará a mesma operação em todos os subobjetos, haverá problemas de desempenho quando a estrutura combinada for grande. Além disso, ao usar o modo de combinação para encapsular o HTML, você deve selecionar a tag apropriada. Por exemplo, a tabela não pode ser usada no modo de combinação e os nós das folhas não são óbvios.