2016-10-02 2 views
0

Чтобы применить flyweight pattern, нам нужно разделить свойство Object на внутренние и внешние свойства. Внутренние свойства делают объект уникальным, тогда как внешние свойства устанавливаются клиентским кодом и используются для выполнения различных операций.Я не вижу никакого использования мухи. Это действительно полезно?

Но мой вопрос в том, почему мы не можем иметь как внутреннее, так и внешнее свойство в качестве переменной экземпляра (см. Класс электронной почты ниже) и просто создать один объект вне цикла и задать параметры в цикле и отправить несколько писем с разными параметрами.

public class Test { 
    public static void main(String[] args) { 
     Email ob = new Email(); 
     for (int i = 0; i < 10; i++) { 
      ob.sender = String.valueOf(i); 
      ob.sendEmail(); 
     } 
    } 
} 

public class Email { 
    public String sender; 
    public void sendEmail() 
    { 
     System.out.println("Email sent to sender:"+sender); 
    } 
} 
+0

Действительно Flyweight - это не шаблон, работа вокруг, чтобы сохранить память на Java. Это не имеет никакого отношения к oop –

+0

@SupunWijerathne, мухи - это образец из канонической книги «Шаблоны дизайна», «Элементы многоразового объектно-ориентированного программного обеспечения». Говорить, что это не шаблон и не имеет ничего общего с ООП - полная глупость; и шаблон не специфичен для Java. Шаблоны OOP GoF являются агностиками языка. – jaco0646

+0

@ jaco0646 не специфичный для Java: yh, я согласен с этим с некоторой заметкой. Но это определенно не имеет ничего общего с OO. Почему вы говорите, что это глупость? Тогда что он имеет с OO? Шаблон проектирования - это то, что говорит о решении проблемы, учитывая структурные аспекты программного обеспечения. Если мухи - это шаблон, я не вижу неправильного, если кто-то говорит, что «merge-sort» - это шаблон. хотел бы видеть вашу идею. :)) –

ответ

3

Иногда модели не очевидны, но это не означает, что они бесполезны. И я боюсь, вы неправильно поняли шаблон мухи.

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

Собственно, это полезно. Например, JDK использует этот шаблон для предоставления кеша Integer (сохраняет небольшой диапазон значений, чтобы эффективно их вернуть) и пул String (см. Метод intern()).

+0

Иногда я вижу, что люди вынуждены использовать шаблон. –

+0

@NikolasCharalambidis ... в тех случаях, когда они не нужны – Andrew

0

Просто то, что Flyweight говорит, это 'Способ обращения с неизменяемыми объектами'.

  • Если какой-то тип объектов неизменны (я вообще предпочитаю все объекты быть неизменны, насколько это возможно),
  • А у вас есть такой объект, созданный внутри приложения, с некоторым набором атрибутов, Ex : неизменныPerson объекта создается с name = "John", age = 20
  • И у вас есть еще один объект точно, как, что после некоторого времени применения excecution (name = "John", age = 20)
  • Просто не использовать ранее созданный, нет необходимости, чтобы создать другую (нет необходимостичтобы не беспокоиться, так как это immutable, атрибуты здесь не меняются)

Так что это в основном работа для сохранения памяти. Это не имеет никакого отношения к ориентации объекта.

Смежные вопросы