Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 02.06.2020
Сообщений: 28

Убрать паттерн наблюдателя

23.12.2020, 15:04. Показов 1346. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется код по ТЗ:

Написать класс электрического чайника. Основные свойства: модель, текущий объем воды, максимальный объем воды,
текущая температура воды.

Основные методы: вскипятить (прибавить 10 градусов к температуре воды), долить воды
(прибавить к текущему объему количество воды, указанное в параметре).

Должны быть реализованы делегаты, вызываемые при:
переполнении максимального объема чайника, при перегреве чайника (температура превысила 100 градусов),
при изменении температуры чайника. Реализовать соответствующие события.

В нем есть паттерн наблюдателя, необходимо переписать код без его использования.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using System;
 
namespace Laba8
{
    class Program
    {
        public delegate void TeaPotStateHandler(object o);
 
         class TeaPot
        {
            public string Model { get; set; }
            public double currV = 0;
            public double maxV = 2.5;
            public double currT = 10;
            public double maxT = 105;
 
            TeaPotStateHandler StateHandler;
 
            public void Register(TeaPotStateHandler State)
            {
                StateHandler += State;
            }
            
            public void NotifyObserver()
            {
                if(StateHandler != null)
                    StateHandler(this);
            }
 
            public void AddWater(double volume)
            {
                currV += volume;
                NotifyObserver();
            }
 
            public bool IsChangedTemp = false;
            public void AddTemp()
            {
                currT += 15;
                IsChangedTemp = true;
                NotifyObserver();
            }
        }
 
        class Observer
        {
            public void OverflowMaxValume(object o)
            {
                TeaPot teapot = (TeaPot)o;
 
                if (teapot.currV > teapot.maxV)
                {
                    throw new InvalidOperationException("Превышение максимального объёма");
                }
            }
 
            public void OverflowMaxTemp(object o)
            {
                TeaPot teapot = (TeaPot)o;
 
                if (teapot.currT > teapot.maxT)
                {
                    throw new InvalidOperationException("Превышение максимальной температуры");
                }
 
            }
 
            public void TempChaneged(object o)
            {
                TeaPot teapot = (TeaPot)o;
 
                if (teapot.IsChangedTemp)
                    Console.WriteLine($"Температура изменилась! Теперь температура чайника {teapot.currT} градусов");
            }
        }
 
        static void Main(string[] args)
        {
            TeaPot teapot = new TeaPot();
            Observer obs = new Observer();
 
            teapot.Register(obs.OverflowMaxValume);
            teapot.Register(obs.OverflowMaxTemp);
            teapot.Register(obs.TempChaneged);
 
            Console.WriteLine("Сколько долить воды?");
            if (double.TryParse(Console.ReadLine(), out double volume))// out так как переменная не инициализирована
            {
                if (volume < 0)
                {
                    throw new InvalidOperationException("Значение меньше 0");
                }
            }
            else
            {
                throw new InvalidOperationException("Некорректная строка");
            }
            teapot.AddWater(volume);
 
            Console.WriteLine("Сколько греть воду? 1 мин - 15 градусов");
            if (int.TryParse(Console.ReadLine(), out int minutes))// out так как переменная не инициализирована
            {
                if (minutes <= 0)
                    throw new InvalidOperationException("Значение меньше 0");
            }
            else
            {
                throw new InvalidOperationException("Некорректная строка");
            }
 
            for (int i = 0; i < minutes; i++)
                teapot.AddTemp();
 
            Console.ReadKey();
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2020, 15:04
Ответы с готовыми решениями:

Почему паттерн абстрактная фабрика - паттерн уровня объектов, если в нём могут быть статические отношения?
Взято из Шевчук А., Охрименко Д., Касьянов А. Design Patterns via C#. Приемы объектно-ориентированного проектирования (2015): Почему...

Паттерн наблюдателя ( Observer )
Доброго времени суток, прошу помочь с моим заданием. Есть хранилище объектов и элемент TreeView. Надо используя вышеупомянутый сделать так,...

Из класса DataProviderColleague убрать жёсткую связь с классом Mediator, используя паттерн observer
Добрый день! Не могу решить такую проблему нужно из класса DataProviderColleague убрать жёсткую связь с классом Mediator используя...

1
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
24.12.2020, 04:11
Лучший ответ Сообщение было отмечено ArtemKaras как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
 
class Program
{
    static void Main()
    {
        TeapotHandler checkV = (teapot) =>
        {
            if (teapot.CurrentV > teapot.MaxV)
            {
                throw new InvalidOperationException("Превышение максимального объёма");
            }
        };
        TeapotHandler checkT = (teapot) =>
        {
            if (teapot.CurrentT > teapot.MaxT)
            {
                throw new InvalidOperationException("Превышение максимальной температуры");
            }
        };
        TeapotHandler displayT = (teapot) =>
        {
            if (teapot.IsChangedTemp)
            {
                Console.WriteLine($"Температура изменилась! Теперь температура чайника {teapot.CurrentT} градусов");
            }
        };
 
        Teapot teapot = new Teapot(checkV, checkT, displayT);
        Console.WriteLine("Сколько долить воды?");
        if (double.TryParse(Console.ReadLine(), out double volume))
        {
            if (volume < 0)
            {
                throw new InvalidOperationException("Значение меньше 0");
            }
        }
        else
        {
            throw new InvalidOperationException("Некорректная строка");
        }
        teapot.AddWater(volume);
 
        Console.WriteLine("Сколько греть воду? 1 мин - 15 градусов");
        if (int.TryParse(Console.ReadLine(), out int minutes))
        {
            if (minutes <= 0)
            {
                throw new InvalidOperationException("Значение меньше 0");
            }
        }
        else
        {
            throw new InvalidOperationException("Некорректная строка");
        }
 
        for (int i = 0; i < minutes; i++)
        {
            teapot.AddTemp();
        }
    }
}
 
delegate void TeapotHandler(Teapot o);
 
class Teapot
{
    private readonly TeapotHandler checkV;
    private readonly TeapotHandler checkT;
    private readonly TeapotHandler displayT;
 
    public Teapot(TeapotHandler checkV, TeapotHandler checkT, TeapotHandler displayT)
    {
        CurrentT = 10;
        this.checkV = checkV;
        this.checkT = checkT;
        this.displayT = displayT;
    }
 
    public string Model { get; set; }
    public double CurrentV { get; private set; }
    public double MaxV => 2.5;
    public double CurrentT { get; private set; }
    public double MaxT => 105;
    public bool IsChangedTemp { get; private set; }
 
    public void AddWater(double volume)
    {
        CurrentV += volume;
        checkV(this);
    }
 
    public void AddTemp()
    {
        CurrentT += 15;
        IsChangedTemp = true;
        checkT(this);
        displayT(this);
        IsChangedTemp = false;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2020, 04:11
Помогаю со студенческими работами здесь

Наблюдатель без наблюдателя
Как используя c# реализовать программу действие которой будет подобно шаблону наблюдателя.

Исследование критерия идеального наблюдателя
помогите пожалуйста написать программу на С# по теме: исследование критерия идеального наблюдателя

Компьютерная графика. Создание наблюдателя
Доброго времени суток. Есть программа она рисует куб. Тут всё в порядке. Но мне нужно реализовать наблюдателя. Куб остаётся на месте а...

Найти углы поворота объекта по углу наблюдателя
Привет. Есть объект A. Все углы его поворота равны 0. Есть наблюдатель B. Он вращается по сферическим координатам и его взгляд...

На каком расстоянии от наблюдателя нужно поместить монету?
На каком расстоянии от наблюдателя нужно поместить монету достоинством в 1 рубль, чтобы она была видна под таким же углом зрения, что и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru