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

ТооП / Тооп(3)

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

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

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

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

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

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

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

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

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

«Реализация паттернов. Наблюдатель»

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

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

Выполнил:

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

Золотых С.В.

Проверил:

Зубков Е.В.

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

2017

Цель работы:

Реализовать паттерн проектирования Наблюдатель.

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Pattern_4_2_

{

class Program

{

static void Main(string[] args)

{

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

var drink_machina = new Drink_machina();

var cofee_drink = new Cofee_drink();

var soda_drink = new Soda_drink();

var tea_drink = new Tea_drink();

Console.WriteLine(" Здесь будут отображаться изменения в акциях в заведении 'Кофе-брейк' ");

Console.WriteLine(" Сделайте выбор: \n 1 - Кофе \n 2 - Содовая \n 3 - Чай \n 4 - КОфе + чай + содовая \n 5 - Кофе + содовая \n 6 - Кофе + чай \n 7 - Чай + содовая ");

Console.WriteLine("--------------------------------");

int control = Convert.ToInt32(Console.ReadLine());

//создание наблюдателей, которые фиксируют изменения в акциях и выводят их по желанию пользователя

switch (control)

{

case 1:

drink_machina.Stock_show(cofee_drink);

drink_machina.Call();

break;

case 2:

drink_machina.Stock_show(soda_drink);

drink_machina.Call();

break;

case 3:

drink_machina.Stock_show(tea_drink);

drink_machina.Call();

break;

case 4:

drink_machina.Stock_show(cofee_drink);

drink_machina.Stock_show(soda_drink);

drink_machina.Stock_show(tea_drink);

drink_machina.Call();

break;

case 5:

drink_machina.Stock_show(cofee_drink);

drink_machina.Stock_show(soda_drink);

drink_machina.Call();

break;

case 6:

drink_machina.Stock_show(cofee_drink);

drink_machina.Stock_show(tea_drink);

drink_machina.Call();

break;

case 7:

drink_machina.Stock_show(soda_drink);

drink_machina.Stock_show(tea_drink);

drink_machina.Call();

break;

default:

break;

}

Console.ReadLine();

}

//интерфейс для наблюдателя

public interface IDrink

{

void Stock_show(Drink drink);

void Stock_announce();

}

//общий интерфейс объектов

public interface Drink

{

void Stock_sub(string cofee, string soda, string tea);

void withdraw();

}

//класс для кофе

class Cofee_drink : Drink

{

private string cofee;

public void Stock_sub(string cofee, string soda, string tea)

{

this.cofee = cofee;

withdraw();

}

public void withdraw()

{

Console.WriteLine(cofee);

}

}

//класс для содовой

class Soda_drink : Drink

{

private string soda;

public void Stock_sub(string cofee, string soda, string tea)

{

this.soda = soda;

withdraw();

}

public void withdraw()

{

Console.WriteLine(soda);

}

}

//класс для чая

class Tea_drink : Drink

{

private string tea;

public void Stock_sub(string cofee, string soda, string tea)

{

this.tea = tea;

withdraw();

}

public void withdraw()

{

Console.WriteLine(tea);

}

}

//класс получения информации об акциях

public class Drink_machina : IDrink

{

private static Random mass= new Random();

public List<Drink> stocks = new List<Drink>();

//случайная акция для кофе

public string Stock_cofee()

{

var news = new List<string>

{

"Эспрессо всего за 40 рублей!",

"Капучино сегодня будет вам стоить только 55 рублей!",

};

return news[mass.Next(2)];

}

//случайная акция для содовой

public string Stock_soda()

{

var news = new List<string>

{

"Fanta (2 литра) всего за 59 рублей!",

"Акции на Coca-Cola сегодня нет(",

"Стоимость Pepsi(1,5л) сегодня 45 рублей!"

};

return news[mass.Next(3)];

}

//случайная акция для чая

public string Stock_tea()

{

var news = new List<string>

{

"Стоимость зелёного чая: 30 рублей)",

"Стоимость чёрного чая: 20 рублей)"

};

return news[mass.Next(2)];

}

//метод для создания нужной акции и добавление её в коллекцию

public void Stock_show(Drink drink)

{

stocks.Add(drink);

}

//метод для показа акции

public void Stock_announce()

{

string cofee = Stock_cofee();

string soda = Stock_soda();

string tea = Stock_tea();

//по элементам коллекции

foreach (Drink drink in stocks)

{

drink.Stock_sub(cofee, soda, tea);

}

}

//метод для независимого вывода

public void Call()

{

Stock_announce();

}

}

}

}

Блок-схема:

Начало

var drink_machina = new Drink_machina();

var cofee_drink = new Cofee_drink();

var soda_drink = new Soda_drink();

var tea_drink = new Tea_drink();

control=Convert.ToInt32(Console.ReadLine())

drink_machina.Stock_show(cofee_drink); drink_machina.Call();

Case 1

Case 2

drink_machina.Stock_show(soda_drink); drink_machina.Call();

Case3

drink_machina.Stock_show(tea_drink); drink_machina.Call();

Case 4

drink_machina.Stock_show(cofee_drink); drink_machina.Stock_show(soda_drink); drink_machina.Stock_show(tea_drink); drink_machina.Call();

Case 5

drink_machina.Stock_show(cofee_drink); drink_machina.Stock_show(soda_drink); drink_machina.Call();

Case 6

drink_machina.Stock_show(cofee_drink);

drink_machina.Stock_show(tea_drink); drink_machina.Call();

Case 7

drink_machina.Stock_show(soda_drink);

drink_machina.Stock_show(tea_drink);

drink_machina.Call();

Конец

Начало

Начало

string cofee;

string Stock_cofee()

Stock_sub(string cofee, string soda, string tea) this.cofee = cofee;

withdraw();

public string Stock_soda()

withdraw()

Console.WriteLine(cofee);

string Stock_tea()

Stock_show(Drink drink)

stocks.Add(drink);

Конец

Stock_announce()

string cofee = Stock_cofee();

string soda = Stock_soda();

string tea = Stock_tea();

drink.Stock_sub(cofee, soda,tea);

Call()

Stock_announce();

Конец

Классы Soda_drink и Tea_drink аналогичны классу Cofee_drink.

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

Вывод:

Для решения задания была применена абстракция приложения, извещающего об акциях. Для этого были созданы три класса Cofee_drink, Soda_drink, Tea_drink, реализующие общий интерфейс Drink и в которых реализованы соответствующие методы вызова объекта. Класс Drink_machina реализует интерфейс IDrink с методами фиксирования изменения в объектах и перенаправлением информации об этих изменения в метод Call(). В основной программе были созданы 7 наблюдателей, которые извещают пользователя об акциях, то есть изменениях в объектах.

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