Ich versuche grundsätzlich, ein Strategie-Muster zu implementieren, aber ich möchte verschiedene Parameter an die "Schnittstellen" Implementierung übergeben (die von dem gleichen Objekt erben) und nicht wissen, ob Das ist möglich. Vielleicht bekomme ich bin das falsche Muster wählen, ich einen Fehler wieStrategie Muster mit verschiedenen Parametern in der Schnittstelle (C#)
‚StrategyA‘ implementiert nicht geerbt abstraktes Mitglied ‚Leer DoSomething (Baseobject)‘
mit dem folgenden Code:
abstract class Strategy
{
public abstract void DoSomething(BaseObject object);
}
class StrategyA : Strategy
{
public override void DoSomething(ObjectA objectA)
{
// . . .
}
}
class StrategyB : Strategy
{
public override void DoSomething(ObjectB objectB)
{
// . . .
}
}
abstract class BaseObject
{
}
class ObjectA : BaseObject
{
// add to BaseObject
}
class ObjectB : BaseObject
{
// add to BaseObject
}
class Context
{
private Strategy _strategy;
// Constructor
public Context(Strategy strategy)
{
this._strategy = strategy;
}
// i may lose addtions to BaseObject doing this "downcasting" anyways?
public void ContextInterface(BaseObject obj)
{
_strategy.DoSomething(obj);
}
}
+1 so ein gängiges Szenario, ich habe Implementierungen gesehen, wo obj wächst und wächst ... –
Verwenden Schnittstellen statt Klassen zB öffentliche Schnittstelle { Leere DoSomething (Baseobject-Objekt); } Dann haben Strategie diese Schnittstelle erben. Basieren Sie Ihren SP auf der Schnittstelle oder einer IStrategy-Schnittstelle, die von dieser Schnittstelle erbt.BTW verwenden DIP für die Injektion mit einem IoC wie Ninject – GregJF