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


Презентации» Информатика» Приспособленец. Оптимизация работы с памятью путём предотвращения создания экземпляров элементов, имеющих общую сущност
Приспособленец 
 (англ. Flyweight, "легковесный (элемент)") Цель
 Оптимизация работы с памятью путём предотвращения создания экземпляров элементов, имеющихОписание
 Flyweight используется для уменьшения затрат при работе с большим количеством/*  * Интерфейс приспособленца  */  public interface Primitive/*  * Окружнсоть - разделяемый приспособленец. Внутреннее состояние - радиус/*  * Разделяемый приспособленец - Квадрат.  * Внутренее состояние/*  * Разделяемый приспособленец - точка  */  public/*  * Контекст рисования, передается клиентом примитиву для отрисовки последнего/*  * Фабрика приспособленцев.  * Реализует разделение оных на  public static synchronized Circle createCircle(int radius) {      if (circles.get(radius)  public static synchronized Point createPoint() {      if (onePoint ==Summary
 (+) Можно получить ощутимую экономию по памяти. (-) Однако, возможно,



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Приспособленец  (англ. Flyweight, "легковесный (элемент)") 


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

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

Слайд 4
Описание слайда:

Слайд 5
Описание слайда:
/* * Интерфейс приспособленца */ public interface Primitive {   /*    * Метод отрисовки примитива с передачей заданного контекста рисования    */   public void draw(Context context); } /* * Интерфейс приспособленца */ 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) { } } /* * Окружнсоть - разделяемый приспособленец. Внутреннее состояние - радиус */ 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) { } } /* * Разделяемый приспособленец - Квадрат. * Внутренее состояние - высота, ширина. */ 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 Primitive {   @Override   public void draw(Context context) { } } /* * Разделяемый приспособленец - точка */ 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;   } } /* * Контекст рисования, передается клиентом примитиву для отрисовки последнего */ 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<Integer, Circle> circles;   private static Map<Integer, Square> squares;      static {     circles = new HashMap<Integer, Circle>();                 squares = new HashMap<Integer, Square>();   } /* * Фабрика приспособленцев. * Реализует разделение оных на основании их внутренних состояний. * */ public abstract class PrimitiveFactory {      private static Point onePoint;   private static Map<Integer, Circle> circles;   private static Map<Integer, Square> squares;      static {     circles = new HashMap<Integer, Circle>();                 squares = new HashMap<Integer, Square>();   }

Слайд 11
Описание слайда:
  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);   }   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) {       onePoint = new Point();     }          return onePoint;   } }   public static synchronized Point createPoint() {     if (onePoint == null) {       onePoint = new Point();     }          return onePoint;   } }

Слайд 13
Описание слайда:
Summary (+) Можно получить ощутимую экономию по памяти. (-) Однако, возможно, за это придется заплатить временем на поиск/передачу/вычисление внешнего состояния. (?) Важно понимать, что применимость данного паттерна определяется, в первую очередь тем, на сколько четко идентифицируются внутреннее и внешнее состояния объектов системы.


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

Похожие презентации