DesignPattern » Cronologia » Versione 1
Amministratore Truelite, 27-02-2007 11:54
| 1 | 1 | Amministratore Truelite | == Flyweight Pattern == |
|---|---|---|---|
| 2 | |||
| 3 | Il pattern flyweight viene utilizzato quando si ha a che fare con un gran numero di oggetti con alcune caratteristiche comuni (che variano raramente) ed altre non comuni di cui ogni oggetto si fa carico per se. |
||
| 4 | |||
| 5 | Questo pattern può essere molto utile quando si vuole alleggerire il carico in ram di un grande numero di oggetti, facendo in modo di riutilizzare oggetti con "lo stesso stato". |
||
| 6 | |||
| 7 | Ecco un esempio di codice: |
||
| 8 | {{{ |
||
| 9 | class TipoOggetto(object): |
||
| 10 | _listaOggetti = {} |
||
| 11 | |||
| 12 | def __new__(cls, name): |
||
| 13 | oggetto = TipoOggetto._listaOggetti.get(name,None) |
||
| 14 | |||
| 15 | if not oggetto: |
||
| 16 | oggetto = object.__new__(cls) |
||
| 17 | TipoOggetto._listaOggetti[name] = oggetto |
||
| 18 | return oggetto |
||
| 19 | |||
| 20 | |||
| 21 | def __init__(self, name): |
||
| 22 | self.name = name |
||
| 23 | print id(self), name |
||
| 24 | |||
| 25 | a = TipoOggetto("obj1") |
||
| 26 | |||
| 27 | b = TipoOggetto("obj2") |
||
| 28 | a = TipoOggetto("obj1") |
||
| 29 | }}} |
||
| 30 | -1210981812 obj1 |
||
| 31 | |||
| 32 | -1210981780 obj2 |
||
| 33 | |||
| 34 | -1210981812 obj1 |
||
| 35 | |||
| 36 | Come si può vedere dal risultato dell'esecuzione il primo ed il terzo oggetto sono "un solo oggetto". |