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

ТооП / Тооп(1)

.docx
Скачиваний:
14
Добавлен:
31.05.2018
Размер:
177.61 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

НАБЕРЕЖНОЧЕЛНИНСКИЙ ИНСТИТУТ (ФИЛИАЛ)

КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ

ЛАБОРАТОРНАЯ РАБОТА №1

«Реализация паттернов. Декоратор и Фасад»

По дисциплине

«Технологии объектно-ориентированного программирования»

Выполнил:

Студент группы 2161121

Золотых С.В.

Проверил:

Зубков Е.В.

Набережные Челны

2017

Цель работы:

Реализовать паттерны проектирования Фасад и Декоратор.

Код программы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace Pattern

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

this.BackColor = Color.FromArgb(255, 240, 178);

pictureBox1.Visible = false;

pictureBox2.Visible = false;

pictureBox4.Visible = false;

pictureBox5.Visible = false;

pictureBox6.Visible = false;

label1.Visible = false;

this.comboBox1.BackColor = Color.FromArgb(196, 155, 106);

this.comboBox1.ForeColor = Color.FromArgb(244, 221, 190);

this.comboBox1.FlatStyle = FlatStyle.Flat;

this.button1.BackColor = Color.FromArgb(196, 155, 106);

this.button1.ForeColor = Color.FromArgb(244, 221, 190);

this.button1.FlatAppearance.BorderSize = 0;

this.button1.FlatStyle = FlatStyle.Flat;

this.button1.Font = new Font("Monotype Corsiva", 18);

}

//базовый класс напитка

public abstract class Base

{

protected string Continue = " ";

public string Get_Start()

{

return Continue;

}

}

//один класс для создания других объектов

class Espresso : Base

{

public Espresso()

{

Continue = "Вы выбрали крепкий кофе ";

}

}

// абстрактные декоратор для проверки совместимости типов

abstract class Decorator_Base : Base { }

//Декоратор молоко

class Milk_Decorator : Decorator_Base

{

private Base base_1;

public Milk_Decorator(Base _base)

{

base_1 = _base;

Continue += base_1.Get_Start() + " с молоком";

}

}

//Декоратор сахар

class Sugar_Decorator : Decorator_Base

{

private Base base_1;

public Sugar_Decorator(Base _base)

{

base_1 = _base;

Continue = base_1.Get_Start() + " с сахаром";

}

}

//Декоратор шоколад

class Chocolate_Decorator : Decorator_Base

{

private Base base_1;

public Chocolate_Decorator(Base _base)

{

base_1 = _base;

Continue = base_1.Get_Start() + " с шоколадом";

}

}

// фасад собирает разрозненные классы в одну систему

class Cofee_Machina

{

//Эспрессо

public string Espresso_1()

{

Base espresso = new Espresso();

espresso.Get_Start();

return espresso.Get_Start();

}

//Капучино

public string Capuchino_1()

{

Base capuchino = new Milk_Decorator(new Espresso());

capuchino.Get_Start();

return capuchino.Get_Start();

}

//Капучино с сахаром

public string Capuchino_sugar()

{

Base capuchino_sugar = new Sugar_Decorator(new Milk_Decorator(new Espresso()));

capuchino_sugar.Get_Start();

return capuchino_sugar.Get_Start();

}

//Капучино с шоколадом

public string Capuchino_chocolate()

{

Base capuchino_chocolate = new Chocolate_Decorator(new Milk_Decorator(new Espresso()));

capuchino_chocolate.Get_Start();

return capuchino_chocolate.Get_Start();

}

//Капучино с сахаром и шоколадом

public string Capuchino_s_c()

{

Base capuchino_s_ch = new Chocolate_Decorator(new Sugar_Decorator(new Milk_Decorator(new Espresso())));

capuchino_s_ch.Get_Start();

return capuchino_s_ch.Get_Start();

}

}

private void button1_Click(object sender, EventArgs e)

{

Graphics g = CreateGraphics();

g.DrawString("Ваш кофе готов: ", new Font("Monotype Corsiva", 18), new SolidBrush(Color.FromArgb(155, 75, 16)), new PointF(150.0F, 190.0F));

// создание объекта

Cofee_Machina now = new Cofee_Machina();

label1.Visible = true;

// для работы с комбобоксом

switch (comboBox1.SelectedIndex)

{

case 0:

label1.Text = now.Espresso_1();

pictureBox2.Visible = true;

break;

case 1:

label1.Text = now.Capuchino_1();

pictureBox1.Visible = true;

break;

case 2:

label1.Text = now.Capuchino_sugar();

pictureBox4.Visible = true;

break;

case 3:

label1.Text = now.Capuchino_chocolate();

pictureBox5.Visible = true;

break;

case 4:

label1.Text = now.Capuchino_s_c();

pictureBox6.Visible = true;

break;

}

}

}

}

Блок-схема:

Начало

Button1:

now = new Cofee_Machina()

Case 0

now.Espresso_1();

Case 1

now.Capuchino_1();

Case 2

now.Capuchino_Sugar();

Case 4

now.Capuchino_Chocolate();

Case 3

now.Capuchino_s_c();

Конец

Фасад Cofee_Machina: Класс Base:

Начало

Начало

Base espresso = new Espresso();

Continue=” ” CDecorator d = new CDecorator();

Base capuchino = new Milk_Decorator(new Espresso());

Get_Start()

return Continue;

Base capuchino_sugar = new Sugar_Decorator(new Milk_Decorator(new Espresso()));

Espresso()

Continue = “Вы выбрали крепкий кофе”

Base capuchino_chocolate = new Chocolate_Decorator(new Milk_Decorator(new Espresso()));

Base capuchino_s_ch = new Chocolate_Decorator(new Sugar_Decorator(new Milk_Decorator(new Espresso())));

Конец

Начало

Конец

Начало

Base base1

CDecorator d = new CDecorator();

Milk_Decorator(Base _base)

base1 = _base; Continue += base1.Get_Start() + " с молоком";

Конец

Конец

Результат выполнения:

Вывод:

Для реализации паттернов была выбрана абстракция Кофемашины. Был создан базовый класс Base, который являлся классом родителем. От него был унаследован класс Espresso со своими методами и полями. Так как подразумевалось, что остальные классы должны создаваться на основе класса Espresso, то были реализованы декораторы, которые позволили создавать новые объекты с тем функционалом, который выбирал пользователь. Для начала был создан абстрактный класс декоратора Decorator_Base для проверки совместимости типов, который наследовался от класса Base. Путём конструкции от абстрактного класса были реализованы декораторы Milk_Decorator, Sugar_Decorator, Chocolate_Decorator. Для улучшения восприятия кода пользователем был применён фасад Cofee_Machina, который собирал разрозненные классы в один интерфейс, позволяя скрыть небольшую громоздкость реализации. В программе использовалась одна кнопка и один comboBox, в котором выбирался напиток, созданный путём применения декораторов к классу Espresso.

Соседние файлы в папке ТооП