Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 2
Регистрация: 02.11.2012
Сообщений: 106
.NET 4.x

Оптимизировать Патерн

13.09.2014, 01:41. Показов 762. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
попробовал реализовать патерн состояния ,но даже не закончив понимаю что слишком много повторяющегося кода
толи я чтото не понял толи зделал не так
подскажыте ,поправте
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Accounting
{
    interface State
    {
        void matriculated();
        void holiday();
        void GetingJob();
    }
 
    class Human
    {
        private State _currentState;
        public SchoolboyState Schoolboy { get; set; }
        public StudentState Student { get; set; }
        public WorkingState Working { get; set; }
        public TuniadecState Tuniadec { get; set; }
        public Human ()
        {
                Schoolboy = new SchoolboyState(this);       
        }
        public void SetState(State state)
        {
            _currentState = state;
        }
    }
 
 
    class SchoolboyState : State
    {
        private Human _human;
        public SchoolboyState (Human human)
        {
            _human=human;
        }
        public void matriculated()
        {
            _human.SetState(_human.Student);
        }
        public void holiday()
        {
 
        }
        public void GetingJob ()
        {
            _human.SetState(_human.Working);
        }
    }
 
    class WorkingState : State 
    {
        public void matriculated()
        {
            _human.SetState(_human.Student);
        }
        public void holiday()
        {
 
        }
        public void GetingJob()
        {
            //уже работает
        }
    }
 
    class StudentState : State
    {
        public void matriculated()
        {
            //куды уже
        }
        public void holiday()
        {
 
        }
        public void GetingJob()
        {
            _human.SetState(_human.Working);
        }
    }
 
    
    class TuniadecState : State
    {
        public void matriculated()
        {
 
        }
        public void holiday()
        {
            //пфф туниядцы не отдыхают
        }
        public void GetingJob()
        {
            _human.SetState(_human.Working);
        }
 
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2014, 01:41
Ответы с готовыми решениями:

Патерн — это прихоть работодателя или же часто применяемая стратегия решение задач
рылся - рылся в интернете но так и не нашёл заданий для которых конкретно бы подходил тот или иной патерн. Можете пожалуйста подкинуть пару...

Реализовать совмещенный патерн Factory Method и Сomposite
Помогите реализовать совмещенный патерн Factory Method и Сomposite.Вот их примеры отдельно ...

MVVM патерн
Всем привет. Уже писал по поводу данного стиля программирования, более менее разобрался, но некоторые вещи не понятны. Допустим у меня...

5
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
13.09.2014, 02:01
ЯрославхД,
Гуглятся примеры очень просто http://www.dofactory.com/net/state-design-pattern
К примеру у вас
C#
1
2
3
4
public SchoolboyState Schoolboy { get; set; }
        public StudentState Student { get; set; }
        public WorkingState Working { get; set; }
        public TuniadecState Tuniadec { get; set; }
вообще не нужно, используйте вместо всего State _currentState
0
1 / 1 / 2
Регистрация: 02.11.2012
Сообщений: 106
13.09.2014, 17:37  [ТС]
Переделал, теперь вопрос ,ето выглядит как патерн состояния теперь?)
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Accounting
{
    interface State
    {
        void matriculated(Human human);
        void holiday(Human human);
        void GetingJob(Human human);
    }
 
    class Human
    {
        private State _currentState;
 
        public Human(State state)
        {
            this.State = state;
        }
        public State State
        {
            get
            {
                return _currentState;
            }
            set
            {
                _currentState = value;
            }
        }
    }
 
 
    class SchoolboyState : State
    {
        public void matriculated(Human human)
        {
            human.State(human) = new StudentState();
        }
        public void holiday(Human human)
        {
            //отдых
        }
        public void GetingJob (Human human)
        {
            human.State(human) = new WorkingState();
        }
    }
 
    class WorkingState : State 
    {
        public void matriculated(Human human)
        {
            human.State(human) = new StudentState();
        }
        public void holiday(Human human)
        {
            //отдых
        }
        public void GetingJob(Human human)
        {
            //уже работает
        }
    }
 
    class StudentState : State
    {
        public void matriculated(Human human)
        {
            //куды уже
        }
        public void holiday(Human human)
        {
 
        }
        public void GetingJob(Human human)
        {
            human.State(human) = new WorkingState();
        }
    }
 
}
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
13.09.2014, 17:55
ЯрославхД,
Вы бы хоть откомпилировать попробовали.
0
1 / 1 / 2
Регистрация: 02.11.2012
Сообщений: 106
13.09.2014, 20:16  [ТС]
та вроде работает ,только не знаю как поубирать "тупиковые" ветки типо устроится на роботу в состоянии работа,или некак и просто меседжбокс туда с ошыбкой засунуть?

Добавлено через 1 минуту
а да извеняюсь,я туда вроде действительно чтото не то копипаснул

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Accounting
{
    interface State
    {
        void matriculated(Human human);
        void holiday(Human human);
        void GetingJob(Human human);
    }
 
    class Human
    {
        private State _currentState;
 
        public Human(State state)
        {
            this.State = state;
        }
        public State State
        {
            get
            {
                return _currentState;
            }
            set
            {
                _currentState = value;
            }
        }
    }
 
 
    class SchoolboyState : State
    {
        public void matriculated(Human human)
        {
            human.State = new StudentState();
        }
        public void holiday(Human human)
        {
            //отдых
        }
        public void GetingJob (Human human)
        {
            human.State = new WorkingState();
        }
    }
 
    class WorkingState : State 
    {
        public void matriculated(Human human)
        {
            human.State = new StudentState();
        }
        public void holiday(Human human)
        {
            //отдых
        }
        public void GetingJob(Human human)
        {
            //уже работает
        }
    }
 
    class StudentState : State
    {
        public void matriculated(Human human)
        {
            //куды уже
        }
        public void holiday(Human human)
        {
 
        }
        public void GetingJob(Human human)
        {
            human.State = new WorkingState();
        }
    }
 
}
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
13.09.2014, 21:29
ЯрославхД,
Видимо вам что-то такое надо
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
    public class Program
    {
        public static void Main(string[] args)
        {
            Human h = new Human();
 
            for (int i = 6; i < 25; i++)
            {
                h.Holiday();
                h.GetingJob();
                h.Matriculated();
                h.Birthday();
                Console.WriteLine();
            }
        }
 
        private abstract class State
        {
            public int Age { get; set; }
            public Human Human { get; set; }
 
            protected State(int age, Human human)
            {
                Age = age;
                Human = human;
            }
 
 
            public abstract void GetingJob();
            public abstract void Holiday();
            public abstract void Matriculated();
 
            public virtual void Birthday()
            {
                Age += 1;
                Console.WriteLine("Today I'm {0}, I become older", Age);
                AgeControlCheck();
            }
 
            protected abstract void AgeControlCheck();
        }
 
        private class SchoolboyState : State
        {
            public SchoolboyState(int age, Human human) : base(age, human)
            {
            }
 
            public SchoolboyState(State state) : base(state.Age, state.Human)
            {
            }
 
            public override void GetingJob()
            {
                Console.WriteLine("I'm tou young. I going to school.");
            }
 
            public override void Holiday()
            {
                Console.WriteLine("Good school holdiay.");
            }
 
            public override void Matriculated()
            {
                Console.WriteLine("When I become older, I will go to university.");
            }
 
            protected override void AgeControlCheck()
            {
                if (Age >= 17)
                {
                    Human.State = new StudentState(this);
                }
            }
 
        }
 
 
        private class WorkerState : State
        {
            public WorkerState(int age, Human human) : base(age, human)
            {
            }
 
            public WorkerState(State state) : base(state.Age, state.Human)
            {
            }
 
            public override void GetingJob()
            {
                Console.WriteLine("I'm already working");
            }
 
            public override void Holiday()
            {
                Console.WriteLine("Good work holiday.");
            }
 
            public override void Matriculated()
            {
                Console.WriteLine("One day i will be dead.");
            }
 
            protected override void AgeControlCheck()
            {
            }
        }
 
        private class Human
        {
            private State _currentState;
 
            public Human()
            {
                _currentState = new SchoolboyState(6, this);
            }
 
            public Human(State state)
            {
                _currentState = state;
            }
 
            public State State
            {
                get { return _currentState; }
                set { _currentState = value; }
            }
 
            public override string ToString()
            {
                return string.Format("CurrentState: {0}", _currentState.GetType().Name);
            }
 
            public void Birthday()
            {
                _currentState.Birthday();
            }
 
 
            public void GetingJob()
            {
                _currentState.GetingJob();
            }
 
            public void Holiday()
            {
                _currentState.Holiday();
            }
 
            public void Matriculated()
            {
                _currentState.Matriculated();
            }
 
        }
 
        class StudentState : State
        {
            public StudentState(int age, Human human) : base(age, human)
            {
            }
 
            public StudentState(State state) : base(state.Age, state.Human)
            {
            }
 
            public override void GetingJob()
            {
                Console.WriteLine("Maybe i find part time job, but later.");
            }
 
            public override void Holiday()
            {
                Console.WriteLine("Good university holiday.");
            }
 
            public override void Matriculated()
            {
                Console.WriteLine("I will go to work.");
            }
 
            protected override void AgeControlCheck()
            {
                if (Age >= 22)
                {
                    Human.State = new WorkerState(this);
                }
            }
        }
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2014, 21:29
Помогаю со студенческими работами здесь

Патерн Decorator для программы
мне нужно использовать паттерн Decorator в моей программе. У меня есть две функции в разных класах void...

Попытка реализовать патерн Singlton
Пытаюсь реализовать сие чудо, накидал заголовочный файл: class AppSettings { public: static AppSettings *getInstance(); ...

обновление времени в програме. патерн Наблюдатель
Здраствуйте. Нужно решыть было такое задание. Но я нашел его в нете. Код подан ниже. Автоматически должно виводитьсяся время и обновляться...

Как правильно применять патерн Decorator
на примере системы управления точкой по продаже кофе с помощью паттерна Decorator class Coffee { cost () //метод возврата цены { ...

Ввод данных пользователем в патерн оператора Like
Делаю задание для универа, в ходе одного из пунктов нужно запросом вывести записи, в которых в нужной ячейке присутствуют буквы которые...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Настройки 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 Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru