Este artigo ou sección precisa dunha revisión do formato que siga o libro de estilo da Galipedia. Pode axudar a mellorar este artigo e outros en condicións semellantes. |
Este artigo ou sección ten un estilo difícil de entender para os lectores interesados no tema. Se podes, por favor edítao e contribúe a facelo máis accesible para o público xeral, sen eliminar os detalles técnicos que interesan aos especialistas. |
O Patrón Obxecto Lixeiro ou Patrón Flyweight serve para eliminar ou reducir a redundancia cando temos gran cantidade de obxectos que conteñen información idéntica, ademais de lograr un equilibrio entre flexibilidade e rendemento (uso de recursos)
Problema: No contexto dun editor de documentos empréganse obxectos para representar os seus elementos: táboas, figuras, caracteres etc. Ademais desexase tratar ós elementos de forma uniforme. O problema é que manter un obxecto para cada letra por exemplo pode resultar moi caro.
Unha solución a este problema é compartir obxectos que poidan empregarse o mesmo tempo en diferentes contextos. A estes obxectos denominarémolos obxectos lixeiros o flyweight.
O obxecto lixeiro ou flyweight actúa como un obxecto independente que non se diferencia do obxecto compartido. A Distinción no estado do obxecto lixeiro (por exemplo no formato da letra ou o carácter que se representa) faise tendo en conta o estado intrínseco, que é o estado interno almacenado dentro do obxecto lixeiro e é independente do contexto no que se usa (por exemplo a letra que representa); e o estado extrínseco, que e ó estado que depende do contexto no que se atopa o obxecto de modo que no obxecto lixeiro non pode ser compartido (a posición e o formato ou o estilo que se lle da ó carácter). Os responsables de proporcionar este estado extrínseco ó obxecto lixeiro cando o necesite son os clientes.
A aplicabilidade deste patrón dase cando se desexan compartir obxectos que cumpren unhas determinadas condicións, algunhas delas son: non se depende da identidade entre obxectos, a existencia dun gran número de obxectos que se desexan compartir, cando o custo de almacenamento dos mesmos é alto debido a gran cantidade de obxectos que se requiren, se a maior parte do estado do obxecto pode facerse extrínseco e moitos grupos de obxectos poden reempregarse por relativamente poucos obxectos compartidos ao eliminar o estado extrínseco.
Os clientes non instancian directamente os obxectos lixeiros, senón que delegan esta responsabilidade na fábrica de obxectos lixeiros para a correcta xestión da compartición destes.
O estado extrínseco é almacenado ou calculado polos clientes e proporcionado ós obxectos lixeiros cando estes o necesitan.
As consecuencias que supón a utilización deste patrón é unha redución nos custos do almacenamento, xa que se reduce no número total de instancias e se empregan un só estado intrínseco por obxecto, a custa dunha penalización debida ó cálculo do estado extrínseco.
Á hora de implementar este patrón teranse en conta os seguintes aspectos:
A aplicabilidade do patrón ven dada polo fácil que é identificar o estado extrínseco e eliminalo dos obxectos compartidos.
En canto á xestión dos obxectos compartidos, os clientes non deberían crear instancias de eles directamente senón que é a fábrica de obxectos lixeiros a que lle permite ós clientes obter un obxecto lixeiro concreto.