off the top of my head, i would create a class called Effect with an abstract method called perform()
then make other classes that define each particular effect, for example, you could create a strengthBuff class or whatever
and implement the perform method to give it whatever logic you want.
perform could also take parameters if needed, like perform(Actor actor) etc.
I did something like this for my Pokemon clone game, each move (like ember for example) not only deals damage to the other pokemon,
but it also has a chance of contaminating the other pokemon with a lingering effect (in case of ember, it was damage over time)
so each move had an effect attached to it, and i simply implemented the perform method for each individual move, (sand attack lowers accuracy, etc)