I think you already got it: the class form uses inheritance, whereas the object form uses composition. There isn't more to it, as far as I can tell...
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
Originally posted by Louis Wang: As for the Adapter pattern, the class form is implementing two interfaces; the object form is using composite to delegate.
Some languages (especially when GOF was first published) supported only single inheritance. Without multiple inheritance or interfaces you cannot implement the class form but as long as you have single inheritance you can still implement the object form.
You can sometimes see a variation of the "object form" in Java when a class doesn't implement an interface itself but lets one of it's (anonymous) inner classes do it.
Robert C. Martin's article on the Interface Segregation Principle (pdf) talks about the differences between the object form (separation through delegation) and class form (separation through multiple inheritance) of the Adapter. [ April 19, 2007: Message edited by: Peer Reynders ]
Joined: Jul 11, 2001
There is another big advantage to the object form: you can use the object form to adapt an object that has already been created. With the class form, you need to be able to control the instanciation of the original object, so that the adapter instance is created.
I regularly use the object form for that reason.
subject: Class form Adapter VS Object form Adapter