ПКРПСиБД LAB3 Захаров А.Е. (Лабораторная работа 3)
Описание файла
Файл "ПКРПСиБД LAB3 Захаров А.Е." внутри архива находится в папке "Лабораторная работа 3". Документ из архива "Лабораторная работа 3", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "ПКРПСиБД LAB3 Захаров А.Е."
Текст из документа "ПКРПСиБД LAB3 Захаров А.Е."
Национальный Исследовательский Университет
МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ
Институт автоматики и вычислительной техники
Кафедра прикладной математики
Лабораторная работа № 3
Реализация одного из порождающих шаблонов проектирования
Курс «Проектирование крупных распределенных программных систем и баз данных»
Выполнил
студент группы А-13-08
Захаров Антон
(8 вариант)
Преподаватель
к.т.н., доц. Куриленко Иван Евгеньевич
Цель работы
Научиться применять порождающие шаблоны проектирования.
Порядок выполнения работы
-
С использованием одного из языков программирования из множества (C++, C#, Java) реализовать порождающий шаблон проектирования «Фабричный метод» (8 вариант).
-
Разработать UML модель.
Требования
-
Наличие работающей демонстрационной программы с исходным кодом.
-
Наличие UML-модели в электронном виде, иллюстрирующей шаблон, полученной с помощью специализированного диаграммера (Rational Enterprise Architect, Visual Paradigm, Visual Studio).
-
Наличие отчёта в печатном виде, содержащего теоретическое введение, UML-модель и исходный код.
Фабричный метод
Порождающий шаблон проектирования
Описание
Фабричный метод (Factory Method) – порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне.
Уместность применения
Шаблон следует применять, если:
-
классу заранее неизвестно, объекты каких подклассов ему нужно создавать;
-
класс спроектирован так, чтобы объекты, которые он создаёт, специфицировались подклассами;
-
класс делегирует свои обязанности одному из нескольких вспомогательных подклассов, и планируется локализовать знание о том, какой класс принимает эти обязанности на себя.
Преимущества, достигаемые при применении шаблона
-
Позволяет сделать код создания объектов более универсальным, не привязываясь к конкретным классам, а оперируя лишь общим интерфейсом.
-
Позволяет установить связь между параллельными иерархиями классов.
Недостатки шаблона
-
Необходимость создавать наследника для каждого нового типа продукта.
Детали реализации
Шаблон реализуется следующим образом:
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-диаграммы
Литература
-
Приёмы объектно-ориентированного проектирования. Паттерны проектирования. – СПб.: Питер, 2011. – 368 с.: ил.
-
PHP: объекты, шаблоны и методики программирования. 3-е изд.: Пер. с англ. – М. : ООО «И.Д. Вильямс», 2011. – 560 с. : ил. – Парал. тит. англ.
Москва, 2012