Требуется ли шаблон С# factory?
Я хочу, чтобы Бог в библиотеке классов G создал Адама в библиотеке классов A, не делая G зависимым от A. Бог производит Адамс для потребления Евой в библиотеке классов E, и это хорошо, чтобы Ева могла знать и зависеть от Адама. (edit - этот образец продолжает улучшаться и улучшаться:)
Решение, о котором я мог думать, это наличие AdamFactory в A. Таким образом AdamFactory знает Адама и может легко его создать (возможно, просто вызвав конструктор Adam). Бог получает AdamFactory и может заказать его для CreateAdam.
Теперь, поскольку Богу не разрешено знать Адама, AdamFacotry CreateAdam должен вернуть объект, и для этого требуется, чтобы Eve поднял объект, возвращенный AdamFactory, на Адама.
Это будет работать, я думаю. Тем не менее, я чувствую себя неловко из-за кастинга, поскольку это не-нет. Это действительно необходимо?
P.S. - Не богохульство предназначалось, и я извиняюсь, если кому-то было больно. Казалось бы, лучше использовать Бога и Адама вместо Создателя и Создано, потому что два последних слова слишком похожи друг на друга.
Изменить: повторить предложение интерфейса. Предположим, что у Адама есть два метода: ProvideLove, ProvideFood и ProvideProtection (мы держим этот образец kis-safe:). Ева использует Адама для этих двух целей, но, конечно, Бог этого не делает. Итак, зачем предоставлять Богу знание о том, что AdamFactor возвращает то, что реализует IAdam, а не только объект? Я не понимаю!
Изменить: рабочий код (со всеми в той же библиотеке, которую моя цель состоит в том, чтобы разделить на разные библиотеки) выглядит примерно так:
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