But other than that, yes, that's the general idea.
An interface is generally used to abstract the protocol from its implementation. For example, if all you want is to write some data, you might define an interface DataWriter, with a method write(byte[] buffer). A class that uses a DataWriter can then use any implementation of the DataWriter interface, regardless of how write(byte[] buffer) is implemented. This is the gist of the strategy pattern.
I hope I'm making sense.
Just to add to this, an interface is a useful tool for writing code for multiple platforms. A good example is a game engine of some kind. You might want to have both a DirectX and OpenGL implementation for it. In this case, you could have an interface for each class, such as an IRenderer class. You would then have a Renderer class implemented in DirectX and one implemented in OpenGL. This way you can use the same function calls and everything to the class regardless of which platform it's running on, but the underlying implementation will be different depending on which platform you are running on. I don't know if that helps or not.