МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
НАБЕРЕЖНОЧЕЛНИНСКИЙ ИНСТИТУТ (ФИЛИАЛ)
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ
ЛАБОРАТОРНАЯ РАБОТА №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
now.cheese();Case 1
now.mashroom();Case 2
checkedListBox2.SelectedIndex()
now.cheese()+vwBuilder.Build_BaconCase 0
now.cheese()+vwBuilder.Build_Mushrooms();Case 1
Конец
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-а, в которых предлагались для пользователя разные виды продукта. Каждый продукт собирался путём выбора нужного строителя.