C#工厂模式是否需要上调?

我希望上帝在类(class)库G中创建类(class)库A中的一个亚当,而又不让G依赖A。上帝在类(class)库E中生产亚当斯供夏娃消费,让夏娃知道并依赖亚当是可以的。
(编辑-该示例越来越好:)

我能想到的解决方案是在A中创建一个AdamFactory。这样,AdamFactory就会知道Adam,并且可以轻松地创建它(可能只是通过调用Adam的构造函数)。上帝收到一个AdamFactory,可以命令它到CreateAdam。

现在,因为不允许上帝认识亚当,所以AdamFacotry的CreateAdam必须返回一个对象,这要求夏娃将AdamFactory返回的对象向上转换到Adam。

我认为这会起作用。但是,我对转播感到不安,因为这是禁忌。这真的是必须的吗?

附言-没有亵渎的意图,如果有人的感情受到伤害,我深表歉意。似乎最好用上帝和亚当代替造物主和被造物,因为后两个词太相似了。

编辑:重新接口(interface)建议。让我们假设亚当有两种方法:ProvideLove,ProvideFood和ProvideProtection(我们保持此示例为基本安全:)。夏娃将亚当用于这两个目的,但上帝当然没有。那么,为什么要让上帝知道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

最佳答案

我不确定我是否完全理解这些要求,但是这里有一个建议:


//in assembly G
public abstract class HumanFactory<T>
{
    public abstract T CreateHuman();
}

//in assembly A
public class Adam { }
//in assembly A
public class AdamFactory : HumanFactory<Adam>
{
    public override Adam CreateHuman()
    {
        return new Adam();
    }
}

//in assembly G
public class God
{
    public T Create<T>(HumanFactory<T> factory)
    {
        return factory.CreateHuman();
    }
}


和用法:

//Somewhere in assembly E
Adam adam = new God().Create(new AdamFactory());

10-08 01:41