我正在玩一種工廠,裝飾者和責任鏈的混雜。實質上,我建立了一個接收請求對象的工廠,對其進行分析並將其傳遞給更具體的內部工廠。我已經到達了下面的結構,但它有問題。仿製藥,工廠和返回更多派生類型
public abstract class AbstractFactoryRequest { }
public class SpecificFactoryRequest : AbstractFactoryRequest { }
public class MoreSpecificFactoryRequest : SpecificFactoryRequest { }
public interface IThing { }
public interface IThingFactory<in T> where T : AbstractFactoryRequest
{
IThing GetThing(T request);
}
public abstract class AbstractThingFactory<T> : IThingFactory<T> where T : AbstractFactoryRequest
{
public IThing GetThing(T request)
{
var innerFactory = GetInnerFactory(request);
return innerFactory.GetThing(request);
}
protected abstract IThingFactory<T> GetInnerFactory(T request);
}
public class SpecificThingFactory : AbstractThingFactory<SpecificFactoryRequest>
{
protected override IThingFactory<SpecificFactoryRequest> GetInnerFactory(SpecificFactoryRequest request)
{
return (IThingFactory<SpecificFactoryRequest>)new MoreSpecificThingFactory();
}
}
public class MoreSpecificThingFactory : AbstractThingFactory<MoreSpecificFactoryRequest>
{
protected override IThingFactory<MoreSpecificFactoryRequest> GetInnerFactory(MoreSpecificFactoryRequest request)
{
// return an even more specific factory...
}
}
的問題想了MoreSpecificThingFactory
從SpecificThingFactory
內歸還new'd時出現。如上所述,ReSharper稱這是一個可疑的演員陣容,如果沒有演員陣容,編譯器會說在MoreSpecificThingFactory和IThingFactory之間沒有隱式轉換。我曾想過,也許這會工作,因爲遺產在那裏。有沒有辦法來解決這個問題?
謝謝。我認爲這是我正在尋找的。我會稍後處理它,並在當時選擇答案。另外,我想提一提,我正在考慮「責任鏈」,並出於某種原因輸入了「指揮鏈」。我會解決這個問題。 – bubbleking