Нужен ли заводской шаблон C# для повышения?C# завод - это upcast a must?
Я хочу, чтобы Бог в библиотеке классов G создал Адама в библиотеке классов A, не делая G зависимым от A. Бог производит Адамс для потребления Евой в библиотеке классов E, и Ева хорошо знать и зависеть от Адама. (edit - этот образец продолжает улучшаться и улучшаться :)
Решение, о котором я мог думать, имеет AdamFactory в A. Таким образом AdamFactory знает Адама и может легко его создать (возможно, просто вызвав конструктор Адама). Бог получает AdamFactory и может заказать его в CreateAdam.
Теперь, поскольку Богу не разрешено знать Адама, CreateAdam от AdamFacotry должен возвращать объект, и для этого требуется, чтобы Ева подняла объект, возвращенный AdamFactory, на Адама.
Это будет работать, я думаю. Тем не менее, я чувствую себя неловко из-за кастинга, поскольку это не-нет. Это действительно необходимо?
P.S. - Не было богохульства, и я извиняюсь, если чьи-то чувства пострадали. Казалось бы, лучше использовать Бога и Адама вместо Творца и Создано, потому что два последних слова слишком похожи друг на друга.
Редактировать: Re предлагает интерфейс. Предположим, что у Адама есть два метода: ProvideLove, ProvideFood и ProvideProtection (мы держим этот образец kis-safe :). Ева использует Адама для этих двух целей, но, конечно, Бог этого не делает. Итак, зачем предоставлять Богу знание о том, что AdamFactor возвращает то, что реализует IAdam, а не только объект? Я не понимаю!
Edit: рабочий код (со всеми в той же библиотеке, что моя цель состоит в том, чтобы отделить в различные библиотеки) выглядит примерно так:
Adam God.LoadAdam(AdamID theAdamID)
var adam = new Adam(theAdamId, this)
Adam.Adam(AdamID theAdamID, God theGod)
_god = theGod
_mind = theGod.LoadMind(theAdamId, this)
Mind God.LoadMind (AdamID theAdamID, Adam theAdam)
var mind = new Mind (theAdam)
var mindId = new minId(theAdamId)
mind.DeserializeFromFile(minId)
Mind.Mind (Adam theAdam)
_adam = theAdam
Я считаю, вы имеете в виду * downcast * возвращенный объект для Адама. –
Я бы пошел на интерфейсы, как указано в первом ответе. Во всяком случае, +1 для хорошего вопроса, очень смешно :-) – Shimrod
Упрощенный вопрос для образца, даже перед его чтением до конца. :) – Stilgar