Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
13 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
186.32 kB
Просмотров:
38
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№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
(+) Можно получить ощутимую экономию по памяти.
(-) Однако, возможно, за это придется заплатить временем на поиск/передачу/вычисление внешнего состояния.
(?) Важно понимать, что применимость данного паттерна определяется, в первую очередь тем, на сколько четко идентифицируются внутреннее и внешнее состояния объектов системы.