Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / Лабораторная работа 3 / ПКРПСиБД LAB3 Захаров А.Е

..docx
Скачиваний:
25
Добавлен:
28.06.2014
Размер:
189.24 Кб
Скачать

Национальный Исследовательский Университет

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ

Институт автоматики и вычислительной техники

Кафедра прикладной математики

Лабораторная работа № 3

Реализация одного из порождающих шаблонов проектирования

Курс «Проектирование крупных распределенных программных систем и баз данных»

Выполнил

студент группы А-13-08

Захаров Антон

(8 вариант)

Преподаватель

к.т.н., доц. Куриленко Иван Евгеньевич

Цель работы

Научиться применять порождающие шаблоны проектирования.

Порядок выполнения работы

  1. С использованием одного из языков программирования из множества (C++, C#, Java) реализовать порождающий шаблон проектирования «Фабричный метод» (8 вариант).

  2. Разработать UML модель.

Требования

  • Наличие работающей демонстрационной программы с исходным кодом.

  • Наличие UML-модели в электронном виде, иллюстрирующей шаблон, полученной с помощью специализированного диаграммера (Rational Enterprise Architect, Visual Paradigm, Visual Studio).

  • Наличие отчёта в печатном виде, содержащего теоретическое введение, UML-модель и исходный код.

Фабричный метод

Порождающий шаблон проектирования

Описание

Фабричный метод (Factory Method) – порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне.

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

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

  • классу заранее неизвестно, объекты каких подклассов ему нужно создавать;

  • класс спроектирован так, чтобы объекты, которые он создаёт, специфицировались подклассами;

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

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

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

  2. Позволяет установить связь между параллельными иерархиями классов.

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

  1. Необходимость создавать наследника для каждого нового типа продукта.

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

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

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace lab3

{

public partial class SimpleForm : Form

{

public SimpleForm()

{

InitializeComponent();

RedButtonCreator redBtnCreator = new RedButtonCreator();

this.button1 = redBtnCreator.FactoryMethod();

GreenButtonCreator greenBtnCreator = new GreenButtonCreator();

this.button2 = greenBtnCreator.FactoryMethod();

BlueButtonCreator blueBtnCreator = new BlueButtonCreator();

this.button3 = blueBtnCreator.FactoryMethod();

this.Controls.Add(this.button1);

this.Controls.Add(this.button2);

this.Controls.Add(this.button3);

}

}

class RedButton : Button

{

public RedButton() : base()

{

this.BackColor = System.Drawing.Color.OrangeRed;

this.ForeColor = System.Drawing.SystemColors.ButtonHighlight;

this.Location = new System.Drawing.Point(100, 50);

this.Size = new System.Drawing.Size(200, 50);

this.Text = "Red button";

this.UseVisualStyleBackColor = false;

}

}

class GreenButton : Button

{

public GreenButton() : base()

{

this.BackColor = System.Drawing.Color.YellowGreen;

this.ForeColor = System.Drawing.SystemColors.ButtonHighlight;

this.Location = new System.Drawing.Point(100, 120);

this.Size = new System.Drawing.Size(200, 50);

this.Text = "Green button";

this.UseVisualStyleBackColor = false;

}

}

class BlueButton : Button

{

public BlueButton() : base()

{

this.BackColor = System.Drawing.Color.DodgerBlue;

this.ForeColor = System.Drawing.SystemColors.ButtonHighlight;

this.Location = new System.Drawing.Point(100, 190);

this.Size = new System.Drawing.Size(200, 50);

this.Text = "Blue button";

this.UseVisualStyleBackColor = false;

}

}

abstract class Creator

{

public abstract ButtonBase FactoryMethod();

}

class RedButtonCreator : Creator

{

public override ButtonBase FactoryMethod()

{

return new RedButton();

}

}

class GreenButtonCreator : Creator

{

public override ButtonBase FactoryMethod()

{

return new GreenButton();

}

}

class BlueButtonCreator : Creator

{

public override ButtonBase FactoryMethod()

{

return new BlueButton();

}

}

}

UML-диаграммы

Литература

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

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

Москва, 2012

Соседние файлы в папке Лабораторная работа 3