definição
A combinação, como o nome indica, refere -se à criação de uma única entidade com um objeto que contém vários componentes. Essa entidade única servirá como ponto de acesso para todos esses componentes e, embora isso simplifique bastante as operações, também pode ser bastante enganador, pois não há uma maneira implícita de indicar claramente quantos componentes a combinação contém.
O objetivo do modo de combinação é dissociar o programa do cliente da arquitetura interna de elementos complexos, para que o programa do cliente trate todos os elementos filhos igualmente.
Cada nó infantil pode tornar a existência complexa. Para o nó pai, não é necessário conhecer a complexidade do nó da criança ou implementar a complexidade do nó filho. Ele só precisa prestar atenção aos métodos específicos do nó filho, para que o nó da criança possa ser usado. Simplifica o relacionamento entre o Pai e o Filho.
O mesmo vale para os nós filhos. A exposição excessiva à interface às vezes é um abuso e também reduz a dependência de fatores externos.
Exemplo
É melhor usarmos uma combinação de ilusão. Na imagem a seguir, você pode ver dois tipos diferentes de objetos: contêineres e bibliotecas são combinações e imagens são lâminas. As combinações podem transportar crianças, mas geralmente não realizam mais comportamentos. A lâmina contém a grande maioria dos comportamentos, mas não pode transportar crianças, pelo menos não em exemplos de combinação tradicionais.
Este exemplo cria uma biblioteca de imagens como um exemplo de padrão de combinação. Existem apenas três níveis: álbum, biblioteca e imagem. O álbum e a biblioteca serão combinados e a imagem é a lâmina, como mostrado na imagem acima. Essa é uma estrutura mais explícita do que a própria combinação exige, mas para este exemplo faz sentido limitar esses níveis a apenas combinações ou lâminas. A combinação padrão não limita quais níveis estruturais podem ter lâminas, nem limita o número de lâminas.
Para começar, você deve primeiro criar uma "classe" GalleryCosta para seus álbuns e bibliotecas. Observe que estou usando o jQuery para executar operações DOM para simplificar o processo.
var GalleryComposite = function (cabeçalho, id) {this.children = []; this.Element = $ ('<div id = "' + id + '"> </div>') .append ('<h2>' + cabeçalho + '</h2>');} galberComCoSite.protype = {add: function (filho) {this.children.push (criança); this.Element.Append (Child.getElement ()); }, remova: function (filho) {for (var node, i = 0; node = this.getChild (i); i ++) {if (node == filho) {this.children.splice (i, 1); this.Element.Detach (Child.getElement ()); retornar true; } if (node.remove (filho)) {return true; }} retornar false; }, getChild: function (i) {return this.children [i]; }, ocultar: function () {for (var node, i = 0; node = this.getChild (i); i ++) {node.hide (); } this.Element.hide (0); }, mostre: function () {for (var node, i = 0; node = this.getChild (i); i ++) {node.show (); } this.element.show (0); }, getElement: function () {return this.Element; }}Este local é um pouco complicado, posso me permitir explicar mais? Construímos essa combinação usando os métodos Adicionar, Remover e GetChild GetChild. Este exemplo não usa na verdade Remover e GetChild, mas eles são muito úteis para criar combinações dinâmicas. Os métodos de ocular, show e getselement são usados para manipular o DOM. Essa combinação deve ser apresentada aos usuários em uma página como uma representação da biblioteca. Essa combinação pode controlar esses elementos da biblioteca através de Ocultar e mostrar. Se você ligar para Hide no álbum, o álbum inteiro desaparecerá, ou você também pode chamá -lo em uma única imagem para que apenas essa imagem desapareça.
Agora, crie uma aula de galeria. Observe que ele usa exatamente o mesmo método que a GalleryCosite. Em outras palavras, eles implementam a mesma interface, exceto que a imagem é uma lâmina; portanto, nenhuma ação é realmente executada no método relacionado à criança, como se não tivesse nenhum filho. A combinação deve ser executada com a mesma interface, porque o elemento combinado não sabe se é outro elemento ou lâmina combinada que ela é adicionada por si só; portanto, se você tentar chamar esses métodos em seus filhos, precisará funcionar completamente sem erros.
var GalleryImage = function (src, id) {this.children = []; this.Element = $ ('<img />') .attr ('id', id) .attr ('src', src);} GalleryImage.prototype = {// Por ser uma folha, não usa esses métodos, //, mas deve implementá -los como a função // interface () {{}, mas deve implementar a função // interface () {{} {} {} {/m), mas deve ser implementando a função // interface () {} {} {} {} {} {}, mas a função () (não é de implementar a função (//) (), não é possível que a função:), que não usa (), que não usa (), que não usa (), que não usa (não é necessário, a função:). }, ocultar: function () {this.element.hide (0); }, mostre: function () {this.element.show (0); }, getElement: function () {return this.Element; }}Dado que você criou o protótipo de objeto, agora você pode usá -lo. De baixo, você pode ver o código para realmente criar a biblioteca de imagens.
var container = new GalleryComposite ('', 'AllGalleries'); var Gallery1 = new GalleryCompose ('Gallery 1', 'Galleries1'); var Gallery2 = new GalleryCote ('Gallery 2', 'Gallery2'); = new GalleryImage ('Image3.jpg', 'img3'); var image4 = new GalleryImage ('image4.jpg', 'img4'); galeria1.add (image1); galeria1.add (image2); Gallero.add (image3); Gallery2.Add (Image4); corpo, //, caso contrário, nunca aparecerá.Container.getElement (). Appendto ('Body'); container.show ();Os benefícios do modo de combinação:
Operações simples também podem produzir resultados complexos. Você só precisa executar operações no objeto de nível superior e permitir que cada objeto filho passe esta operação por conta própria. Isso é especialmente útil para as operações repetidas.
No modo de combinação, o acoplamento entre os objetos individuais é muito solto. Enquanto eles implementarem a mesma interface, é apenas uma pequena ajuda mudar suas posições ou trocá -las. Ele promove a reutilização do código e também é propício à reconstrução do código.
Sempre que uma operação é realizada em um objeto combinado de nível superior, é na verdade uma pesquisa profunda de toda a estrutura para encontrar nós, e o programador que criou o objeto combinado ignora esses detalhes. É muito fácil de adicionar, excluir e encontrar nós nesta hierarquia.
Desvantagens do modo de combinação:
A facilidade de uso de um objeto combinado pode mascarar o custo de cada operação que suporta. Como qualquer operação chamada por um objeto combinado será passada para todos os seus subobjetos. Se essa hierarquia for grande, o desempenho do sistema será afetado. A operação normal do modo de combinação requer alguma forma de interface.
Ao combinar objetos e classes de nós são usados como ferramentas de embalagem para elementos HTML, objetos combinados devem cumprir as regras de uso HTML. Por exemplo, é difícil converter uma tabela em um objeto combinado.
Quanto mais rigoroso a inspeção da interface, mais confiável será a classe de objeto combinado.