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". |