A design pattern is just that: A pattern used to design software.
Many clever programmers over the last six decades have discovered themselves writing code for various different projects using the same basic structures.
A simple one is the factory method, instead of writing:
$a = new D();
$a->foo = 'bar';
$a->baz = 'buzz';
$b = new D();
$b->foo = 'bar';
$b->baz = 'buzz';
$c = new D();
...
It is much simpler to have a function that does that all for you:
function makeD()
{
$temp = new D();
$temp->foo = 'bar';
$temp->baz = 'buzz';
return $temp;
}
and then call it a few times:
$a = makeD();
$b = makeD();
$c = makeD();
This particular pattern is the builder pattern. You can search them on wikipedia, or read about them in a number of books, but don't confuse them for being a panacea.
Design patterns are only patterns, if you find yourself saying "Man, I really could use a simplified way of doing x" then you can probably find a design pattern to simplify the code. Once you've used a few design patterns, they'll start to be part of your toolbox, and you'll be able to look at a problem and tell "I should use an [insert design pattern here]", but if you don't use a formal design pattern, that's ok too.
I would say that interfaces are mostly unrelated to design patterns, although some design patterns use interfaces as part of the pattern.