ПКРПСиБД LAB6 Машеров Д.Е. (Лабораторная работа 6), страница 2

2015-08-23СтудИзба

Описание файла

Файл "ПКРПСиБД LAB6 Машеров Д.Е." внутри архива находится в папке "Лабораторная работа 6". Документ из архива "Лабораторная работа 6", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.

Онлайн просмотр документа "ПКРПСиБД LAB6 Машеров Д.Е."

Текст 2 страницы из документа "ПКРПСиБД LAB6 Машеров Д.Е."

Уместность применения

Может потребоваться добавить к некоторому объекту дополнительную функциональность, которая будет выполняться до, после или даже вместо основной функциональности объекта.

Преимущества, достигаемые при применении шаблона

Шаблон позволяет:

  • динамически и прозрачно для клиента изменять функциональность объекта;

  • реализовать небольшую функциональность, которая в дальнейшем может быть исключена;

  • уменьшить число классов, получающихся в результате использования наследования;

  • добавить функциональность классу, от который невозможно наследоваться;

  • реализовать аналог множественного наследования, в языках его не поддерживающих.

Недостатки шаблона

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

Детали реализации

Component.cs

abstract class Component

{

protected int value;

public int Value

{

get {return value;}

}

public abstract int Operation();

}

ConcreteComponent.cs

class ConcreteComponent : Component

{

public ConcreteComponent(int value)

{

this.value = value;

}

public override int Operation()

{

return value * value;

}

}

Decorator.cs

class Decorator : Component

{

protected Component component;

public Component Component

{

get { return component; }

set { component = value; }

}

public override int Operation()

{

return component.Operation();

}

}

DecoratorA.cs

class DecoratorA : Decorator

{

string state;

public DecoratorA(string state)

{

this.state = state;

}

public int Operation()

{

return component.Operation() * component.Operation();

}

}

DecoratorB.cs

class DecoratorB : Decorator

{

public int Operation()

{

return component.Operation() * component.Operation() * component.Operation();

}

}

Программа:

static void Main(string[] args)

{

ConcreteComponent c = new ConcreteComponent(2);

DecoratorA decoratorA = new DecoratorA("qwerty");

DecoratorB decoratorB = new DecoratorB();

decoratorA.Component = c;

decoratorB.Component = decoratorA;

Console.WriteLine(decoratorB.Operation());

Console.Read();

}

UML-диаграмма

Диаграмма классов:



Диаграмма последовательности





Литература

  1. http://ru.wikipedia.org/wiki/Декоратор_(шаблон_проектирования)

  2. http://andrey.moveax.ru/patterns/oop/structural/decorator/

  3. http://java.dzone.com/articles/design-patterns-decorator



Фасад

Категория: Структурные шаблоны

Описание

Представляет унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.

Уместность применения

Шаблон следует применять, если:

  • Необходимо предоставить простой интерфейс к сложной подсистеме

  • Между клиентами и классами реализации существует много зависимостей

  • Необходимо разделить систему на различные «слои»

Преимущества, достигаемые при применении шаблона

Данный шаблон:

  • Изолирует клиентов от компонентов подсистемы, уменьшая тем самым число объектов, с которыми клиентам приходится иметь дело, и упрощая работу с подсистемой

  • Позволяет ослабить связанность между подсистемой и ее клиентами

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

Недостатки шаблона

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

Детали реализации

Subsystems.cs

class InputSystem

{

public int input()

{

Console.WriteLine("Введите число");

return Convert.ToInt16(Console.ReadLine());

}

}

class CalcSystem

{

public int Add(int x, int y)

{

return x + y;

}

}

class OutputSystem

{

public void output(int x)

{

Console.WriteLine("Результат: " + x);

Console.Read();

}

}

Facade.cs

class Facade

{

static InputSystem input;

static CalcSystem calc;

static OutputSystem output;

public Facade()

{

input = new InputSystem();

calc = new CalcSystem();

output = new OutputSystem();

}

public int Input()

{

return input.input();

}

public int Add(int x, int y)

{

return calc.Add(x,y);

}

public void Output(int x)

{

output.output(x);

}

}

Программа:

static void Main(string[] args)

{

Facade facade = new Facade();

int x = facade.Input();

int y = facade.Input();

x = facade.Add(x, y);

facade.Output(x);

}

UML-диаграмма

Диаграмма классов:



Диаграмма последовательности





Литература

  1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб: Питер, 2001. — 368 с.: ил. (Серия «Библиотека программиста»)



Приспособленец

Категория: Структурные шаблоны

Описание

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

Уместность применения

  • В приложении используется большое число объектов и из-за этого накладные расходы на хранение высоки.

  • Большую часть состояния объектов можно вынести вовне (в ответственность клиентов, которые создают и используют эти объекты). Многие группы объектов можно заменить относительно небольшим количеством разделяемых объектов, поскольку внешнее состояние вынесено.

  • Приложение не зависит от идентичности объекта. Поскольку объекты-приспособленцы могут разделяться, то проверка на идентичность возвратит истину для «концептуально» различных объектов (внутреннее состояние объектов же не меняется). Ключевой момент в том, что когда эти объекты запускают свои функции, то с учетом переданной от клиента информации (внешнего состояния) – результат выполнения получения совсем не идентичен другим

Преимущества, достигаемые при применении шаблона

Позволяет эконмить память за счет:

  • Уменьшается общее число экземпляров.

  • Сокращется объем памяти, необходимый для хранения внутреннего состояния.

  • Внешнее состояни вычисляется, а не хранится.

Недостатки шаблона

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

Детали реализации

Plane.cs

class Plane

{

protected string type;

protected int wingspan;

protected int capacity;

protected int speed;

protected int range;

protected int assetNumber;

public void Display(int assetNumber)

{

this.assetNumber = assetNumber;

Console.WriteLine(assetNumber + " " + type + ": " + Environment.NewLine +

" wingspan: " + wingspan + Environment.NewLine +

" capacity: " + capacity + Environment.NewLine +

" speed: " + speed + Environment.NewLine +

" range:" + range);

}

}

Planes.cs

class Boeing797 : Plane

{

public Boeing797()

{

type = "Boeing797";

wingspan = 80;

capacity = 1000;

speed = 1046;

range = 14400;

}

}

class Airbus380 : Plane

{

public Airbus380()

{

type = "Airbus380";

wingspan = 790;

capacity = 555;

speed = 912;

range = 10370;

}

}

PlaneFactory.cs

class PlaneFactory

{

Dictionary planes = new Dictionary();

public Plane GetPlane(string type)

{

Plane plane;

if (!planes.TryGetValue(type,out plane))

{

switch (type)

{

case "Boeing797": plane = new Boeing797(); break;

case "Airbus380": plane = new Airbus380(); break;

}

planes.Add(type, plane);

}

return plane;

}

}

Программа:

static void Main(string[] args)

{

PlaneFactory pf = new PlaneFactory();

List planes = new List() { "Boeing797", "Airbus380", "Airbus380", "Boeing797" };

int assetNumber = 10001;

foreach (string type in planes)

{

assetNumber++;

Plane plane = pf.GetPlane(type);

plane.Display(assetNumber);

}

Console.Read();

}

}

UML-диаграмма

Диаграмма классов:



Диаграмма последовательности





Литература

  1. http://codelab.ru/pattern/flyweight/

  2. http://groovy.codehaus.org/Flyweight+Pattern

  3. http://ru.wikipedia.org/wiki/Flyweight



Заместитель

Категория: Структурные шаблоны

Описание

Заместитель (Proxy) - шаблон проектирования, который предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы

В зависимости от цели использования можно выделить следующие типы Прокси:

  • Удаленный прокси (Remote proxy) – обеспечивает взаимодействие с объектом в другом адресном пространстве. Это может быть как другое приложение на текущем компьютере, так и компонент на интернет сервере. При этом клиент обращается к объекту как к локальному, не замечая различий.

  • Виртуальный прокси (Virtual proxy) – выполняет оптимизацию доступа к объекту, может самостоятельно обрабатывать некоторые запросы. Например, создание ресурсоёмких объектов только при абсолютной необходимости в них. Другим характерным примером может служить кэширование, в результате которого Прокси сам может отвечать на часть запросов.

  • Защищающий прокси (Protection proxy) – управляет объектом, разграничивая права доступа различных клиентов.

  • Умная ссылка (Smart reference) – обеспечивает выполнение дополнительных действий при вызове методов объекта. Примерами могут служить подсчет ссылок или обеспечение потокобезопасности работы с объектом.

Уместность применения

Шаблон применяется, если:

  • работа с объектом не должна зависеть от того, где он реально расположен (от адресного пространства приложения до удаленного сервера);

  • нужно выполнять определенные действия при доступе к объекту;

  • необходимо оптимизировать взаимодействие объекта с клиентом.

Преимущества, достигаемые при применении шаблона

  • Упрощяет и оптимизирует взаимодействие с объектом, скрывая несущественные для конкретной задачи подробности реализации.

  • Прозрачен для клиента, поскольку предоставляет тот же интерфейс, что и замещаемый объект.

Недостатки шаблона

  • Уменьшается эффективность, посольку клиент обращается к объекту ненапрямую

Детали реализации

IMath.cs

class Plane

interface IMath

{

double Add(double x, double y);

double Sub(double x, double y);

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5288
Авторов
на СтудИзбе
417
Средний доход
с одного платного файла
Обучение Подробнее