C#

Паттерн Абстрактная Фабрика

Здарова. Начали изучать паттерны, и как раз таки нам дали задание по нему чтобы практиковаться. По заданию я должен создать два типа животных это хищные и травоядные (абстрактным), потом должен создать фабрику континент. Дальше уже нужно создать реальные классы континентов и каждый из этих континентов создает и возвращает свойственные ему классы животных. А потом мне надо добавить возможность продемонстрировать их работу. А сам пытался сделать как то так но все таки застрял там в пункте континентов или даже может не правильно я понял, вот сам код: https://ideone.com/GwHEoE
Если не сложно тыкайте на мои ошибки чтобы я понял что здесь не так
Синтаксические ошибки:
- При описании интерфейсов в C# не используют ключевое слово public для компонентов интерфейса - т. к. естественно в интерфейсе всё public.

Ошибки абстракции:
- class PredatoryAnimal : IContinent // тут сказано, что животное является континентом...
- Если каждое животное имеет свойство Name, пусть будет базовый интерфейс IAnimal, содержащий свойство Name. К тому же, этот интерфейс будет полезен для абстракции континента

Насчёт реализации паттерна:
- Континент должен быть абстрактным классом, умеющим возвращать список животных (IEnumerable< IAnimal >) - таким образом континент и является абстрактной фабрикой.
- Конкретный континент должен иметь всю информацию о своих животных, но тем не менее возвращать их список именно с типом перечисления IAnimal, а не какого-либо производного.
- К абстракции континента следует добавить какую-нибудь метаинформацию, чтобы поставщик абстрактной фабрики имел какие-то сведения, на основе которых он бы определял, какую фабрику надо создавать. Для этого подойдёт строковое свойство или атрибут.

Использование паттерна:
- Все эти телодвижения делаются для того, чтобы в пользовательском коде можно было написать так:
```
var AustralianAnimals = ContinentProducer.GetContinent("Австралия").GetAnimals();
```
Андрей Денисов
Андрей Денисов
5 779
Лучший ответ
>или даже может не правильно я понял
Да, ты абсолютно правильно понял - ты ничего не понял.

>Если не сложно тыкайте на мои ошибки чтобы я понял что здесь не так
Ну там мало что написано, но совершенно очевидно, что если у каждого зверя будет свой уникальный класс и интерфейс, абстрактной фабрике будет сложновато его создать. Ну то есть зверя-то он создаст, но не отличит его от вообще любого объекта - с тем же успехом можно было обойтись и без фабрики.
Иван Шеремет
Иван Шеремет
75 350
Кирилл Сергеев Так и знал! А что, бы вы посоветовали? Как мне поступить?