Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы / Лабораторная работа 2 / ПКРПСиБД LAB2 Захаров А.Е..docx
Скачиваний:
20
Добавлен:
28.06.2014
Размер:
306.17 Кб
Скачать

Uml-диаграммы

Шаблон делегирования

Основные шаблоны

Описание

Шаблон делегирования (англ. Delegationpattern) – это способ, которым объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту.

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

Шаблон даёт возможность изменить поведение конкретного экземпляра объекта вместо создания нового класса путем наследования. Таким образом, если при работе с объектом велика вероятность возникновения такой ситуации, следует использовать шаблон делегирования.

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

Применение шаблона делегирования ускоряет процесс внесения серьёзных изменений в логику работы программы. Например, если используя данный шаблон, был написан класс, обеспечивающий хранение данных в XMLфайлах, то без труда можно начать хранить данные в БД. Для этого потребуется написать новый обработчик и назначить его ответственным за хранение данных, что гораздо проще, чем переписать весь исходный класс.

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

Шаблон обычно затрудняет оптимизацию по скорости в пользу улучшенной чистоты абстракции.

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

Шаблон реализуется следующим образом:

using System;

using System.Text;

namespace Lab2_4

{

interface IDelegate

{

double sum(double a, double b);

}

class GoodStudent : IDelegate

{

public double sum(double a, double b) { return a + b; }

}

class BadStudent : IDelegate

{

public double sum(double a, double b)

{

Random rand = new Random();

return rand.Next(5, 10);

}

}

class Delegate : IDelegate

{

IDelegate student = new GoodStudent();

public double sum(double a, double b)

{

return student.sum(a, b);

}

public void setStudent(IDelegate s)

{

student = s;

}

}

class Program

{

static void Main(string[] args)

{

Delegate teacher = new Delegate();

Console.WriteLine("Хороший студент: 2 + 2 = " + teacher.sum(2, 2));

teacher.setStudent(new BadStudent());

Console.WriteLine("Плохой студент: 2 + 2 = " + teacher.sum(2, 2));

Console.ReadLine();

}

}

}

Uml-диаграммы

Литература

  1. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. – СПб.: Питер, 2011. – 368 с.: ил.

  2. PHP: объекты, шаблоны и методики программирования.3-е изд.: Пер. с англ. – М. : ООО «И.Д. Вильямс», 2011. – 560 с. : ил. – Парал. тит. англ.