Я пишу видеоигру. В этой видеоигре я применяю различные силы к объектам в игре. Силы тяги, силы удара, гравитационные силы. Хотя они рассчитываются по-разному, все они имеют одинаковые основные элементы. Мне нужно вызвать функцию обновления, которая оценит силу и добавит силу к объекту, к которому она прикреплена.
Итак, я создал интерфейс IForce, который имеет функцию обновления для своей подписи. Все мои силы реализуют этот интерфейс:
public interface IForce
{
void Update(Particle particle, GameTime gameTime);
}
Вот пример реализации.
public class Spring : IForce
{
private Particle ThisParticle;
private Particle ThatParticle;
private float K;
public Spring(Particle thisParticle, Particle thatParticle, float k)
{
ThisParticle = thisParticle;
ThatParticle = thatParticle;
}
public void Update(Particle particle, GameTime gameTime)
{
float X = Vector3.Length(ThisParticle - ThatParticle);
ThisParticle.Forces.Add(K * X);
}
}
Функция обновления имеет упрощенное обновление силы пружины для облегчения понимания.
Это помогает несколькими способами.
Я могу полностью изменить способ вычисления силы, не влияя на другие части моего кода. Я делаю это все время. В том же духе мне легко добавлять новые силы. Пока он реализует интерфейс IForce, я знаю, что он будет хорошо сочетаться с моим существующим кодом.
Еще один способ, которым он помогает, - справиться с большим количеством сил. У меня есть реестр сил, который имеет список IForce. Поскольку все силы реализуют этот интерфейс и имеют функцию обновления, очень легко обновить все силы в моей игре. Когда я создаю силу, я добавляю ее в список. Затем я перебираю список и вызываю функцию обновления каждого элемента, не заботясь о том, что это за тип силы, и все мои силы обновляются.
Я использую интерфейсы каждый день в самых разных ситуациях. Они фантастические!