You have not yet used GenServers? They do it very similar to this…
Just to underline this point: example
The Demo
module is the callback module. None of the usual behaviour
ceremony is actually necessary - other than implementing the mandatory callback functions.
{:ok, pid} = GenServer.start_link(Demo,[])
The Demo
callback module is composed with the GenServer
behaviour module leading to a GenServer
based process with the specialized Demo
functionality.
In OO:
parse!/1
would be a method on the abstract class. It may have some generic logic but doesn’t do the actual work. It would call a hook methoddo_parse/1
that is left for the subclass to implement the content specific parsing.- The subclass overides
do_parse/1
implementing the content specific implementation. You use the subclass to parse the content it is specialized for.
So:
Parser.parse!/2
is the generic function in the behaviour module that will delegate the details of parsing the specific content toMyParser
.MyParser
is a collection of hook function implementations needed to parse the specific content (organized as a callback module).