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

Посмотреть архив целиком

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

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

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

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





Лабораторная работа № 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






Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.