Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТооП / Тооп(2).docx
Скачиваний:
9
Добавлен:
31.05.2018
Размер:
270.04 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

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

Выполнил:

Студент группы 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_2

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

Graphics g = CreateGraphics();

this.BackColor = Color.FromArgb(243, 226, 166);

pictureBox1.Visible = false;

pictureBox2.Visible = false;

pictureBox3.Visible = false;

label1.Visible = false;

this.button1.BackColor = Color.FromArgb(231, 197, 79);

this.button1.ForeColor = Color.FromArgb(243, 226, 166);

this.button1.FlatAppearance.BorderSize = 0;

this.button1.FlatStyle = FlatStyle.Flat;

this.button1.Font = new Font("Century Gothic", 16);

this.label1.Font = new Font("Century Gothic", 14);

this.label2.Font = new Font("Century Gothic", 14);

this.label3.Font = new Font("Century Gothic", 14);

this.label2.Text = "Классическая";

this.label3.Text = "Неклассическая";

this.checkedListBox1.BackColor = Color.FromArgb(231, 197, 79);

this.checkedListBox1.ForeColor = Color.FromArgb(243, 226, 166);

this.checkedListBox2.BackColor = Color.FromArgb(231, 197, 79);

this.checkedListBox2.ForeColor = Color.FromArgb(243, 226, 166);

}

//Родительский класс

class Pizza

{

public string cheese;

public string tomato;

public string mushrooms;

public string bacon;

}

//Абстрактный класс Строителя

abstract class Pizza_Builder_Base

{

protected Pizza pizza;

protected string Continue;

protected Pizza_Builder_Base()

{

pizza = new Pizza();

}

public Pizza Get_pizza()

{

return pizza;

}

public abstract string Build_Cheese();

public abstract string Build_Mushrooms();

public abstract string Build_Tomato();

public abstract string Build_Bacon();

}

//Строитель Грибной пиццы

class Mushroom_Builder_Pizza : Pizza_Builder_Base

{

public override string Build_Cheese()

{

pizza.cheese = " с тёртым сыром";

return pizza.cheese;

}

public override string Build_Bacon()

{

pizza.bacon = " с жареным беконом";

return pizza.bacon;

}

public override string Build_Mushrooms()

{

pizza.mushrooms = "Грибная пицца ";

return pizza.mushrooms;

}

public override string Build_Tomato()

{

pizza.tomato = " с томатами";

return pizza.tomato;

}

}

//Строитель сырной пиццы

class Cheese_Builder_Pizza : Pizza_Builder_Base

{

public override string Build_Cheese()

{

pizza.cheese = "Сырная пицца ";

return pizza.cheese;

}

public override string Build_Bacon()

{

pizza.bacon = " с жареным беконом";

return pizza.bacon;

}

public override string Build_Mushrooms()

{

pizza.mushrooms = " с грибами поверх сыра";

return pizza.mushrooms;

}

public override string Build_Tomato()

{

pizza.tomato = " с томатной пастой";

return pizza.tomato;

}

}

//Строитель Маргариты

class Margaret_Builder : Pizza_Builder_Base

{

public override string Build_Cheese()

{

pizza.cheese = " с тёртым сыром";

return pizza.cheese;

}

public override string Build_Bacon()

{

pizza.bacon = " с беконом";

return pizza.bacon;

}

public override string Build_Mushrooms()

{

pizza.mushrooms = " с грибами";

return pizza.mushrooms;

}

public override string Build_Tomato()

{

pizza.tomato = "Маргарита с томатами и томатной пастой";

return pizza.tomato;

}

}

//фасад для сцепления разрозненых классов

class Pizza_Machina

{

public string Continue;

//сборка первой пиццы

public string margarita()

{

var vwBuilder = new Margaret_Builder();

Continue = vwBuilder.Build_Tomato() + vwBuilder.Build_Cheese();

return Continue;

}

//сборка второй пиццы

public string cheese()

{

var vwBuilder = new Cheese_Builder_Pizza();

Continue = vwBuilder.Build_Cheese() + vwBuilder.Build_Tomato();

return Continue;

}

//сборка третьей пиццы

public string mashroom()

{

var vwBuilder = new Mushroom_Builder_Pizza();

Continue = vwBuilder.Build_Mushrooms() + vwBuilder.Build_Cheese() + vwBuilder.Build_Tomato();

return Continue;

}

}

private void button1_Click(object sender, EventArgs e)

{

Graphics g = CreateGraphics();

g.DrawString("Ваш пицца готова: ", new Font("Century Gothic", 18), new SolidBrush(Color.FromArgb(155, 75, 16)), new PointF(150.0F, 231.0F));

label1.Visible = true;

//создание класса Фасада

Pizza_Machina now = new Pizza_Machina();

switch (checkedListBox1.SelectedIndex)

{

case 0:

label1.Text = now.margarita();

pictureBox1.Visible = true;

break;

case 1:

label1.Text = now.cheese();

pictureBox2.Visible = true;

break;

case 2:

label1.Text = now.mashroom();

pictureBox3.Visible = true;

break;

}

switch (checkedListBox2.SelectedIndex)

{

case 0:

Pizza_Builder_Base vwBuilder = new Cheese_Builder_Pizza();

label1.Text = now.cheese() + vwBuilder.Build_Bacon();

pictureBox2.Visible = true;

break;

case 1:

vwBuilder = new Cheese_Builder_Pizza();

label1.Text =now.cheese()+vwBuilder.Build_Mushrooms();

pictureBox2.Visible = true;

break;

case 2:

vwBuilder = new Mushroom_Builder_Pizza();

label1.Text =now.mashroom()+ vwBuilder.Build_Bacon();

pictureBox3.Visible = true;

break;

case 3:

vwBuilder = new Margaret_Builder();

label1.Text = now.margarita() + vwBuilder.Build_Bacon();

pictureBox1.Visible = true;

break;

}

}

}

}

Блок-схема:

Начало

now = new Pizza_Machina()

checkedListBox1.SelectedIndex()

now.margarita ();

Case 0

Case 1

now.cheese();

Case 2

now.mashroom();

checkedListBox2.SelectedIndex()

Case 0

now.cheese()+vwBuilder.Build_Bacon

Case 1

now.cheese()+vwBuilder.Build_Mushrooms();

Конец

Case 2

Case 3

now.mashroom()+ vwBuilder.Build_Bacon();

now.margarita() + vwBuilder.Build_Bacon();

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

Начало

string cheese;

string tomato;

string mushrooms;

string bacon;

Начало

var vwBuilder = new Margaret_Builder();

Continue = vwBuilder.Build_Tomato() + vwBuilder.Build_Cheese();

Конец

var vwBuilder = new Cheese_Builder_Pizza();

Continue = vwBuilder.Build_Cheese() + vwBuilder.Build_Tomato();

var vwBuilder = new Mushroom_Builder_Pizza();

Начало

Continue=vwBuilder.Build_Mushrooms()+vwBuilder.Build_Cheese()+vwBuilder.Build_Tomato();

Build_Cheese()

pizza.cheese = " с тёртым сыром"; return pizza.cheese;

Конец

Build_Bacon()

pizza.bacon = " с жареным беконом";

return pizza.bacon;

Начало

protected Pizza pizza;

Build_Mushrooms()

pizza.mushrooms = "Грибная пицца";

return pizza.mushrooms;

string Build_Cheese();

string Build_Mushrooms();

string Build_Tomato();

string Build_Bacon();

Build_Tomato()

pizza.tomato = " с томатами";

return pizza.tomato;

Конец

Конец

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

Вывод:

Для решения задания была применена абстракция приготовления пиццы. Был создан родительский класс Pizza, от которого наследовался абстрактный класс строитель Pizza_Builder. От класса Pizza_Builder наследовались конкретные строители: Cheese_Builder_Pizza, Mashrooms_Builder_Pizza, Margaret_Pizza. В каждом строителе реализованы нужные именно ему методы. Для упрощения некоторой части программы был создан фасад, который собирал строители в отдельные методы. В программе была использована одна кнопка и два checkedListBox-а, в которых предлагались для пользователя разные виды продукта. Каждый продукт собирался путём выбора нужного строителя.

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