Здарова. Начали изучать паттерны, и как раз таки нам дали задание по нему чтобы практиковаться. По заданию я должен создать два типа животных это хищные и травоядные (абстрактным), потом должен создать фабрику континент. Дальше уже нужно создать реальные классы континентов и каждый из этих континентов создает и возвращает свойственные ему классы животных. А потом мне надо добавить возможность продемонстрировать их работу. А сам пытался сделать как то так но все таки застрял там в пункте континентов или даже может не правильно я понял, вот сам код: https://ideone.com/GwHEoE
Если не сложно тыкайте на мои ошибки чтобы я понял что здесь не так
C#
Паттерн Абстрактная Фабрика
Синтаксические ошибки:
- При описании интерфейсов в C# не используют ключевое слово public для компонентов интерфейса - т. к. естественно в интерфейсе всё public.
Ошибки абстракции:
- class PredatoryAnimal : IContinent // тут сказано, что животное является континентом...
- Если каждое животное имеет свойство Name, пусть будет базовый интерфейс IAnimal, содержащий свойство Name. К тому же, этот интерфейс будет полезен для абстракции континента
Насчёт реализации паттерна:
- Континент должен быть абстрактным классом, умеющим возвращать список животных (IEnumerable< IAnimal >) - таким образом континент и является абстрактной фабрикой.
- Конкретный континент должен иметь всю информацию о своих животных, но тем не менее возвращать их список именно с типом перечисления IAnimal, а не какого-либо производного.
- К абстракции континента следует добавить какую-нибудь метаинформацию, чтобы поставщик абстрактной фабрики имел какие-то сведения, на основе которых он бы определял, какую фабрику надо создавать. Для этого подойдёт строковое свойство или атрибут.
Использование паттерна:
- Все эти телодвижения делаются для того, чтобы в пользовательском коде можно было написать так:
```
var AustralianAnimals = ContinentProducer.GetContinent("Австралия").GetAnimals();
```
- При описании интерфейсов в C# не используют ключевое слово public для компонентов интерфейса - т. к. естественно в интерфейсе всё public.
Ошибки абстракции:
- class PredatoryAnimal : IContinent // тут сказано, что животное является континентом...
- Если каждое животное имеет свойство Name, пусть будет базовый интерфейс IAnimal, содержащий свойство Name. К тому же, этот интерфейс будет полезен для абстракции континента
Насчёт реализации паттерна:
- Континент должен быть абстрактным классом, умеющим возвращать список животных (IEnumerable< IAnimal >) - таким образом континент и является абстрактной фабрикой.
- Конкретный континент должен иметь всю информацию о своих животных, но тем не менее возвращать их список именно с типом перечисления IAnimal, а не какого-либо производного.
- К абстракции континента следует добавить какую-нибудь метаинформацию, чтобы поставщик абстрактной фабрики имел какие-то сведения, на основе которых он бы определял, какую фабрику надо создавать. Для этого подойдёт строковое свойство или атрибут.
Использование паттерна:
- Все эти телодвижения делаются для того, чтобы в пользовательском коде можно было написать так:
```
var AustralianAnimals = ContinentProducer.GetContinent("Австралия").GetAnimals();
```
>или даже может не правильно я понял
Да, ты абсолютно правильно понял - ты ничего не понял.
>Если не сложно тыкайте на мои ошибки чтобы я понял что здесь не так
Ну там мало что написано, но совершенно очевидно, что если у каждого зверя будет свой уникальный класс и интерфейс, абстрактной фабрике будет сложновато его создать. Ну то есть зверя-то он создаст, но не отличит его от вообще любого объекта - с тем же успехом можно было обойтись и без фабрики.
Да, ты абсолютно правильно понял - ты ничего не понял.
>Если не сложно тыкайте на мои ошибки чтобы я понял что здесь не так
Ну там мало что написано, но совершенно очевидно, что если у каждого зверя будет свой уникальный класс и интерфейс, абстрактной фабрике будет сложновато его создать. Ну то есть зверя-то он создаст, но не отличит его от вообще любого объекта - с тем же успехом можно было обойтись и без фабрики.
Кирилл Сергеев
Так и знал! А что, бы вы посоветовали? Как мне поступить?
Похожие вопросы
- Форекс: вопрос по актуальности паттернов. Как вы к ним относитесь? Исследуете? Считать ли их субъективными фикциями?
- Вопрос по паттерну "Декоратор" в Java
- Паттерны в Fl Studio 11
- Когда закончится эта грёбанная Фабрика Звёзд? Где справедливость?
- Проблемы в отношениях - негативный паттЕрн УМА ?
- Часто ли на JS используются паттерны проектирования?
- Про абстрактную живопись
- Почему эта фабрика 200 лет (при шести царях и семи генсеках! ) была рентабельной, а при Путине вдруг обанкротилась?...
- Давно интересует такой вопрос, почему в СССР, в 1980-1989 годах, работали и фабрики и заводы, и безработных не было, а
- Дорогие и уважаемые, форумчане! Кто-нибудь пробовал набор шоколадных конфет "Олень" от фабрики "Красный Октябрь"?