У меня небольшая проблема с реализацией шаблона проектирования FlyWeight в Java 11.
У меня есть пример для рисования цветных прямоугольников, где свойство Intrinsi c - это цвет, а свойства Extrinsi c - это размеры прямоугольника. .
Таким образом, это означает, что я буду новым экземпляром, только если у меня прямоугольник другого цвета.
Вы можете посмотреть всю мою реализацию здесь:
https://github.com/zrebec/DesignPatterns/tree/master/DesignPatterns/src/sk/zrebec/learn/java/designpatterns/flyweight
У меня есть метод "classi c", когда я каждый раз создаю новый прямоугольник (закомментированный конструктор в методе MyRectangle и 2 строки в конструкторе программы и нескомментированный метод FlyWeight с использованием RectFactory
Я создал Factory
public class RectFactory {
private static final HashMap<Color, MyRectangle> rectsByColor = new HashMap<Color, MyRectangle>();
public static MyRectangle getRect(Color color) {
MyRectangle rect = (MyRectangle)rectsByColor.get(color);
if (rect == null) {
rect = new MyRectangle(color);
rectsByColor.put(color, rect);
}
return rect;
}
}
Тогда мой конструктор выглядит так:
public MyRectangle(Color color) {
this.color = color;
}
public void draw(Graphics g, int upperX, int upperY, int lowerX, int lowerY) {
g.setColor(color);
g.fillRect(upperX, upperY, lowerX, lowerY);
}
}
и реализация в Program. java выглядит так:
MyRectangle rect = RectFactory.getRect(getRandomColor());
rect.draw(g, getRandX(), getRandY(), getRandX(), getRandY());
Но у меня очень схожий результат с обоими методами.
На моем компьютере отрисовка 4000000 прямоугольников занимает около 7 секунд и с классом c мето d (без использования Factory) тоже
Метод FlyWeight
Первый результат:
Используемая память в байтах: 171 853 6 Это заняло 7392 миллисекунды
Второй результат:
Использованная память в байтах: 172 005 6 Это заняло 7047 миллисекунд
Класси c метод, когда экземпляр прямоугольника создается каждый раз
Первый результат:
Используемая память в байтах: 171 664 8 Это заняло 7489 миллисекунд
Второй результат:
Используемая память в байтах: 171 760 8 Это заняло 7178 миллисекунд
**
Шаблон проектирования FlyWeight должен составлять около 200 до 300% быстрее, не так ли?
Пожалуйста, где у меня проблемы с реализацией? Конечно, вы можете скачать код и попробовать это.
Спасибо за любой совет