Я бы сказал так, что: - Когда применяется данный паттерн(State): - "Когда необходимо уйти от многочисленных условных конструкций". У вас Вы добавляете "многочисленные условные конструкции" в Методе NextStation() класса Radio, и вы вдобавок нарушили один из принципов SOLID - "Liskov substitution principle". Т.Е. нам нужно уйти он условных конструкций с помощью Этого Патерна, а увас получилось так что вы наоборот пришли к ним. Я бы преределал Так: public interface IStation { void Play(); IStation NextStation(); } public class RadioFm : IStation { public void Play() {Console.WriteLine("Radio FM");} public IStation NextStation() {return new RadioFora();} } public class RadioFora : IStation { public void Play() {Console.WriteLine("Radio Fora");} public IStation NextStation() {return new RadioFm();} } public class Radio { public IStation Station; public void NextStation() {Station = Station.NextStation();} public void Play() {Station.Play();} } и Radio radio = new Radio {Station = new RadioFm()}; radio.Play(); radio.NextStation(); radio.Play(); Спасибо!!!
Для тех кто не понял, почему в последнем примере вывелось 8 строчек вместо 10, поясню: чтобы вывелось 10 строчек, надо добавить в методе doSometing(Human human) класса Weekend ещё одну строчку в последнем блоке else : human.doSomething();
Везде где есть набор каких либо подклассов объекта. Например у тебя есть класс Фильм, фильмы бывают разных жанров. Вот State будет Жанром фильма со своими подклассами(фэнтези, комедии, боевики), а контекстом будет просто Movie с агрегацией на Жанр.
всё вроде работает я только не понял почему при счётчик цикла for (int i = 0; i < 10 ; i++) { h.doSomething(); } i = 10 на выходе получаем Работаем!!! Отдыхаем(Zzz) Отдыхаем(Zzz) Отдыхаем(Zzz) Работаем!!! Отдыхаем(Zzz) Отдыхаем(Zzz) Отдыхаем(Zzz) то есть 8 строчек а не 10 я потестил со счётчиком i=1, i=2, i=3, i=4 получаем ожидаемые 1 , 2, 3 и 4 строчек соответственно, а вот при i = 5 получаем почему то не 5 строчек а те же 4 как т при i = 4 то есть теряется 1 итерация что ли? Я не шибко опытный кодер может ребята поопытнее меня найдут почему так и исправят ошибку? Автор, спасибо всё очень доходчиво .
дядя, если ты действительно хочешь своими уроками помочь, тебе нужно поработать над тем, чтоб ПРАВИЛЬНО излагать мысли, а не чтоб зритель сам всё склеивал у себя в голове
c категоричностью выше насравшего не согласен, но однако есть сомнения в правильности показанного. Шаблон "состояние" относится к группе структурных и из названия ясно что его задача именно хранить состояния Это тесно переплетается с шаблоном flyweight (не помню русского названия) - при присвоении сохраненного состояния к объекту flyweight он становится полновесным объектом считывая из объекта "состояния" свое новое состояние. Сам объект стэйт ничего не меняет Он призван создать абстракцию именно хранения данных А то что в видео больше похоже на машину состояний Возможно путанница с названиями...
Ну это однозначный лайк! Очень полезно! Автор вы молодец! Жду новых видео
Да, было очень интересно и понятно! Жду новых видео по Java
Я бы сказал так, что: - Когда применяется данный паттерн(State):
- "Когда необходимо уйти от многочисленных условных конструкций". У вас Вы добавляете "многочисленные условные конструкции" в Методе NextStation() класса Radio, и вы вдобавок нарушили один из принципов SOLID - "Liskov substitution principle". Т.Е. нам нужно уйти он условных конструкций с помощью Этого Патерна, а увас получилось так что вы наоборот пришли к ним. Я бы преределал Так: public interface IStation
{
void Play();
IStation NextStation();
}
public class RadioFm : IStation
{
public void Play()
{Console.WriteLine("Radio FM");}
public IStation NextStation()
{return new RadioFora();}
}
public class RadioFora : IStation
{
public void Play()
{Console.WriteLine("Radio Fora");}
public IStation NextStation()
{return new RadioFm();}
}
public class Radio
{
public IStation Station;
public void NextStation()
{Station = Station.NextStation();}
public void Play()
{Station.Play();}
}
и
Radio radio = new Radio {Station = new RadioFm()};
radio.Play();
radio.NextStation();
radio.Play();
Спасибо!!!
да ты правильно написал. сам так же реализовывал этот паттерн и видел другие реализации таким способом
твой код жестко связан и ничем не отличается от примера автора.
Для тех кто не понял, почему в последнем примере вывелось 8 строчек вместо 10, поясню:
чтобы вывелось 10 строчек, надо добавить в методе doSometing(Human human) класса Weekend ещё одну строчку в последнем блоке else :
human.doSomething();
Объек состояния будет сам менять состояние контекста. Изнутри ? Примеры какие то совсем не понятные. Где и когда нужно применять этот шаблон ?
Везде где есть набор каких либо подклассов объекта. Например у тебя есть класс Фильм, фильмы бывают разных жанров. Вот State будет Жанром фильма со своими подклассами(фэнтези, комедии, боевики), а контекстом будет просто Movie с агрегацией на Жанр.
Доходчиво и понятно.
Так и не понял почему в примере с Human вывело 8 сообщений, а не 10, хотя в цикле было прописано именно 10 итераций.
А зачем нужны все эти паттерны, если в итоге всё сводится к ифам?
Ох уж эти программисты-анальники со своим юмором
eclipse козлом обозвали. Он обиделся и ушёл. А если серьёзно - оказывается Redux на шаблоне State построен
всё вроде работает
я только не понял почему при счётчик цикла
for (int i = 0; i < 10 ; i++) { h.doSomething(); }
i = 10
на выходе получаем
Работаем!!!
Отдыхаем(Zzz)
Отдыхаем(Zzz)
Отдыхаем(Zzz)
Работаем!!!
Отдыхаем(Zzz)
Отдыхаем(Zzz)
Отдыхаем(Zzz)
то есть 8 строчек а не 10
я потестил со счётчиком i=1, i=2, i=3, i=4 получаем ожидаемые 1 , 2, 3 и 4 строчек соответственно,
а вот при i = 5 получаем почему то не 5 строчек а те же 4 как т при i = 4
то есть теряется 1 итерация что ли?
Я не шибко опытный кодер может ребята поопытнее меня найдут почему так и исправят ошибку?
Автор, спасибо всё очень доходчиво .
дядя, если ты действительно хочешь своими уроками помочь, тебе нужно поработать над тем, чтоб ПРАВИЛЬНО излагать мысли, а не чтоб зритель сам всё склеивал у себя в голове
thx
говноуроки от говногуру
Обоснуешь, или просто насрать в коменты решил?
c категоричностью выше насравшего не согласен, но однако есть сомнения в правильности показанного. Шаблон "состояние" относится к группе структурных и из названия ясно что его задача именно хранить состояния Это тесно переплетается с шаблоном flyweight (не помню русского названия) - при присвоении сохраненного состояния к объекту flyweight он становится полновесным объектом считывая из объекта "состояния" свое новое состояние. Сам объект стэйт ничего не меняет Он призван создать абстракцию именно хранения данных А то что в видео больше похоже на машину состояний Возможно путанница с названиями...