Инструменты пользователя

Инструменты сайта


pattern_flyweight

Назад

Паттерн Приспособленец представляет себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.

Преимущество

  • Сокращение количества экземпляров класса во время выполнения (Экономит память).
  • Централизованное хранение состояния многих «виртуальных» объектов.

Flyweight
public class Flyweight
{
    private int row;
    public Flyweight(int theRow)
    {
        row = theRow;
        System.out.println("Объект: " + row);
    }
 
    void report(int col)
    {
        System.out.print(" " + row + col);
    }
}
Factory
class Factory
{
    private Flyweight[] pool;
 
    public Factory(int maxRows)
    {
        pool = new Flyweight[maxRows];
    }
 
    public Flyweight getFlyweight(int theRow)
    {
        if (pool[theRow] == null)
        {
            pool[theRow] = new Flyweight(theRow);
        }
        return pool[theRow];
    }
}
public class Main
{
    public static final int ROWS = 6, COLS = 10;
    public static void main(String[] args)
    {
        Factory factory = new Factory(ROWS);
        for (int i = 0; i < ROWS; i++)
        {
            for (int j = 0; j < COLS; j++)
            {
                factory.getFlyweight(i).report(j);
            }
            System.out.println();
        }
    }
}
Результат
Объект: 0
 00 01 02 03 04 05 06 07 08 09
Объект: 1
 10 11 12 13 14 15 16 17 18 19
Объект: 2
 20 21 22 23 24 25 26 27 28 29
Объект: 3
 30 31 32 33 34 35 36 37 38 39
Объект: 4
 40 41 42 43 44 45 46 47 48 49
Объект: 5
 50 51 52 53 54 55 56 57 58 59