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

Содержание

Слайд 2

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

Цель

Оптимизация работы с памятью путём предотвращения создания экземпляров элементов, имеющих общую

сущность.
Слайд 3

Описание Flyweight используется для уменьшения затрат при работе с большим количеством

Описание

Flyweight используется для уменьшения затрат при работе с большим количеством мелких

объектов. При проектировании приспособленца необходимо разделить его свойства на внешние и внутренние. Внутренние свойства всегда неизменны, тогда как внешние могут отличаться в зависимости от места и контекста применения и должны быть вынесены за пределы приспособленца.
Слайд 4

Слайд 5

/* * Интерфейс приспособленца */ public interface Primitive { /* *

/* * Интерфейс приспособленца */ public interface Primitive {   /* *

Метод отрисовки примитива с передачей заданного контекста рисования */   public void draw(Context context); }
Слайд 6

/* * Окружнсоть - разделяемый приспособленец. Внутреннее состояние - радиус */

/* * Окружнсоть - разделяемый приспособленец. Внутреннее состояние - радиус */

public class Circle implements Primitive {   private int radius;   public Circle(int radius) {     this.radius = radius;   }   @Override   public void draw(Context context) { } }
Слайд 7

/* * Разделяемый приспособленец - Квадрат. * Внутренее состояние - высота,

/* * Разделяемый приспособленец - Квадрат. * Внутренее состояние - высота,

ширина. */ public class Square implements Primitive {   private int height, width;   public Square(int height, int width) {     this.height = height;     this.width = width;   }   @Override   public void draw(Context context) { } }
Слайд 8

/* * Разделяемый приспособленец - точка */ public class Point implements

/* * Разделяемый приспособленец - точка */ public class Point implements

Primitive {   @Override   public void draw(Context context) { } }
Слайд 9

/* * Контекст рисования, передается клиентом примитиву для отрисовки последнего */

/* * Контекст рисования, передается клиентом примитиву для отрисовки последнего */

public final class Context {   public final int x;   public final int y;   public final Color color;   public Context(int x, int y, Color collor) {     this.x = x;     this.y = y;     this.color = collor;   } }
Слайд 10

/* * Фабрика приспособленцев. * Реализует разделение оных на основании их

/* * Фабрика приспособленцев. * Реализует разделение оных на основании их

внутренних состояний. * */ public abstract class PrimitiveFactory {   private static Point onePoint;   private static Map circles;   private static Map squares;   static {     circles = new HashMap();                 squares = new HashMap();   }
Слайд 11

public static synchronized Circle createCircle(int radius) { if (circles.get(radius) == null)

  public static synchronized Circle createCircle(int radius) {     if (circles.get(radius) ==

null) {       circles.put(radius, new Circle(radius));     }     return circles.get(radius);   }   public static synchronized Square createSquare(int height, int width) {     if (squares.get(height*10+width) == null) {       squares.put(height*10+width, new Square(height, width));     }     return squares.get(height*10+width);   }
Слайд 12

public static synchronized Point createPoint() { if (onePoint == null) {

  public static synchronized Point createPoint() {     if (onePoint == null)

{       onePoint = new Point();     }     return onePoint;   } }