Obxecto Lixeiro

dereita|450px
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)

* **Clasificación:** estrutural
* **Propósito:** Uso compartido dun gran número de obxectos lixeiros (ou de grao fino) para aumentar a eficiencia.

## Motivación 
**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.

## Aplicabilidade 
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.

## Estrutura 
## Participantes 
* ObxectoLixeiro ou Flyweight: Declara a interface mediante a cal os obxectos lixeiros reciben e actúan sobre o estado extrínseco.
* ObxectoLixeiroConcreto ou ConcreteFlyweight: Complementa a interface do obxecto lixeiro engadindo o estado intrínseco.
* ObxectoLixeiroNoCompartido ou UnsharedConcreteFlyweight: Pode facerse obxectos coa interface do obxecto lixeiro que non se compartan. En xeral estes obxectos conteñen outros obxectos lixeiros (fila, columna etc).
* FábricaDeObxectosLixeiros ou FlyweightFactory: Crea e xestiona os obxectos lixeiros e asegura o correcto compartir dos obxectos lixeiros.
* Cliente ou Client: Manteñen referencias a obxectos lixeiros e calcula (ou almacena) o estado extrínseco dos obxectos lixeiros.

### Colaboración entre participantes 
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.

## Consecuencias 
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.

## Implementación 
Á 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.

## Véxase tamén 
### Ligazóns externas 
Páxina de patróns de deseño