有人能确认我下面的方法是正确的还是有更好的替代方案:
// An interface
IAnimal
{
pubilc void Hunt();
}
// An abstract class
Animal<T> : IAnimal
{
public void Hunt()
{
UseWeapon(T);
}
protected abstract T GetWeapon();
protected abstract void UseWeapon(T weapon);
}这样我就可以有这样的实现:
Tiger : Animal<Claw>
Hyena : Animal<Teeth>
Eagle : Animal<Beak>例如:
Tiger : Animal<Claw>
{
protected override void UseWeapon(Claw claw)
{
// logic here
}
protected override void GetWeapon()
{
// logic here to populate props & return Claw();
}
}然后我可以打电话给:
IAnimal animal = GetRandomAnimal(); // OR GetTiger();
animal.Hunt()发布于 2016-11-08 15:36:15
我宁愿使用这种方法,它可以很容易地与DI一起使用:
interface IAnimal
{
pubilc void Hunt();
}
interface IWeapon
{
}
Animal : IAnimal
{
IWeapon _weapon;
public void Animal(IWeapon weapon)
{
_weapon = weapon;
}
public void Hunt()
{
UseWeapon(_weapon);
}
protected abstract void UseWeapon(IWeapon weapon);
}如果您需要多个武器,那么您只需在构造函数中注入IEnumerable<IWeapon>并适当地更改逻辑即可。
https://stackoverflow.com/questions/40480777
复制相似问题